- 论坛徽章:
- 0
|
(对不住啊,一不小心发错版了,烦请版主删除)
如果有不对的地方,请不吝赐教。
1 读到“ok”时退出
sed '/ok/q' a.txt
2 读到以“9”开头的行时退出
sed '/^9/q' a.txt
3 删除a.txt的第2行
sed '2d' a.txt
4 删除a.txt的第2~3行
sed '2,3d' a.txt
5 删除a.txt的第5行到第一个包含cat的行
sed '5,/cat/d' a.txt
6 删除a.txt的空行
sed '/^$/d' a.txt
7 将每行的第一个Diary替换为DIARY
sed 's/Diary/DIRAY/' a.txt
8 将所有出现的Diary替换为DIARY
sed 's/Diary/DIRAY/g' a.txt
9 显示所有包含is的行号
sed -n '/is/ =' aaa
-n:禁止默认的输出(读入源行,经处理后输出)
=:功能限制符,表示输入行号
10 将第2到第3行复制后再输出
sed '2,3 p' a.txt
-p:将模式匹配的行(经处理后)再输出一次
11 输出不包含is的行
sed -n '/is/!p' a.txt
12 只输出修改过的行内容
sed -n 's/Diary/DIRAY/gp' a.txt
13 只对第1至6行的所有is进行替换
sed '1,6s/is/xxxxx/gp' a.txt
14 只对第1至6行的所有is进行替换,并且只显经过修改的行
sed -n '1,6s/is/xxxxx/gp' a.txt
15 只对包含is的行进行替换,将所有的th替换成TH,并且只显示这些经过替换的行
sed -n '/is/s/th/TH/gp' a.txt
如果某行有is,但没有th(即没有进行替换),则该行不输出,所以sed的参数p相当于将所有sed命令处理成功的行再输出一次。
16 将s.txt文件包含is的每一行后插入t.txt文件的内容作为输出
sed '/is/r t.txt' s.txt
17 将s.txt文件中包含is的每一行写入到一个新的文件t.txt中。
sed '/is/w t.txt' s.txt
18 将s.txt中每一次出现look的行至每一次出现look的行的内容输出到新的文件t.txt。
sed '/what/,/look/w t.txt' s.txt
19 将s.txt的行读入内存的模式空间中,首先将所有的is用IS替换,此时模式空间内容已修改;执行第二条命令,如果在该行中有字母e,则将所有的e用E替换后再输出修改过的行,最后将模式空间的内容输出。对每一行都进行这两项操作,然后把下一行读入内存进行同样的处理。
sed -n -e 's/is/IS/g' -e 's/e/E/gp' s.txt
-n:该参数对两个命令都有作用
-e:表示后面是一个命令,两个命令前的-e都不能省略。
再如,删除原文件的第2、3、5行:
sed -e '2d' -e '3d' -e '5d' s.txt
还有一种简单的方法,可能实现-e参数的功能,即将各个命令依次用分号相隔,将上面两个命令用该写法重写,如下
sed -n 's/is/IS/g;s/e/E/gp' s.txt
sed '2d;3d;5d' s.txt
20 p.txt的内容为:
s/is/IS/gp
s/e/E/gp
命令: sed -n -f p.txt s.txt
功能:用文件内容作为命令。将s.txt的行读入内存的模式空间中,将该行中所有is用IS替换,并输出该行,同时修改模式空间。之后,执行第二条命令,如果在该行中有字母e,则将所有的e用E替换后再输出修改过的行。对每一行都进行p.txt文件内容所指定的这一系列操作,然后把下一行读入内存进行同样的处理。
21 a.txt的内容
/is/a\
append a
/e/a\
append b
命令:sed -f a.txt s.txt
功能:a.txt 文件内容为要执行的命令,将s.txt的行读入内存的模式空间中,如果该行包含is,则输出该行后,还要在该行后输出append a。在不改变模式究竟内容的情况下,执行第二条命令,如果在该行中有字母e,则再在下一行输出append b。对每一行都进行这两项操作,然后把下一行读入内存进行同样的处理。 |
|