Linux命令 sed
一. 以行为单位进行操作。
d:删除
$ nl passwd | sed '2,5d' # 删除第2~5行
$ nl passwd | sed '2d' # 删除第2行
$ nl passwd | sed '3,$d' # 删除第3行到最后一行
a: 之后,i: 之前添加
$ nl passwd | sed '2a drink tea' # 在第2行后添加内容
$ nl passwd | sed '2i drink tea'
\: 添加多行
键入'\'后再键入'Enter'
c: 替换
$ nl passwd | sed '2,5c No 2-5 number' # 把第2~5行替换
p: 显示
$ nl passwd | sed -n '5,7p' # 其中-n表示quite模式,
二. 部分数据的搜索并替换
sed 's/要被替换的字符串/新的字符串/g'
删掉'inet '及其之前的内容
$ cat sed_file | grep 'inet '
$ cat sed_file | grep 'inet ' | sed 's/^.*inet //g'
删掉' netmask'及其之后的内容
注意第1种用法不对,被匹配字符串并不是以' netmask'开头,而是在IP之后,还是对'^'和'$'理解不到位。
$ cat sed_file | grep 'inet ' | sed 's/^.*inet //g' | sed 's/ *netmask.*//g'
删掉注释行和空行
$ cat sed_file | sed 's/#.*$//g' # 把注释行替换为空行
$ cat sed_file | sed 's/#.*$//g' | sed '/^$/d' # 删掉空行
-i: 直接修改文件内容
$ sed -i 's/\.$/\!/g' regular_express.txt # 把'.'改为'!'
$ sed -i '$a This is a test' regular_express.txt # 在文件结尾添加一行
-e: 如果sed后面含有两个以上的指令,需要在每个指令前面加上'-e' ,否则报错
$ cat passwd | sed -e '4d' -e '6c no six line' # 删掉第4行并替换第6行。 注意:得到的结果是在新文件中,被替换的行显示为第5行,因为之前删掉了一行
sed的优势:
有一个100万行的文件,如果要在第100行加入某些文字,此时使用vim会疯掉,因为文件太大了,可以通过sed命令直接修改或替换。