sed 是一种流式文本编辑器,常用于文本替换、文本过滤、行选择等操作。
常见的 sed 使用方法
1、替换文本中的字符串
使用 sed 可以在文本中替换指定的字符串。例如,将文本中所有的 old_text 替换为 new_text,可以执行以下命令:
sed 's/old_text/new_text/g' file.txt
其中,s 表示替换操作,g 表示替换所有匹配到的字符串。file.txt 是要进行替换的文本文件名。
2、删除指定行
使用 sed 可以删除文本文件中的指定行。
2.1 单行删除
例如,删除文件中第3行的内容,可以执行以下命令:
sed '3d' file.txt
其中,3d 表示删除第3行的内容。
2.2 多行删除
如果要删除多行内容,可以用逗号分隔行号,例如:
sed '3,5d' file.txt
表示删除第3行到第5行的内容。
3、按条件替换
使用 sed 可以按照指定的条件替换文本文件中的字符串。
例如,将文本中行首为 old_text 的字符串替换为 new_text,可以执行以下命令:
sed 's/^old_text/new_text/g' file.txt
其中,^
表示行首的意思,即只替换行首为 old_text 的字符串。
4、显示指定行
使用 sed 可以显示文本文件中的指定行。例如,显示文件中的第3行,可以执行以下命令:
sed -n '3p' file.txt
其中,-n 表示关闭默认输出模式,3p 表示输出第3行的内容。
5、执行多个命令
使用 sed 可以执行多个命令,例如,替换文件中的多个字符串,并删除指定行,可以执行以下命令:
sed -e 's/old_text1/new_text1/g' -e 's/old_text2/new_text2/g' -e '5d' file.txt
其中,-e 表示执行多个命令,用逗号分隔多个命令即可。这个命令的作用是将文本文件中的 old_text1 替换成 new_text1,将 old_text2 替换成 new_text2,并且删除第五行,-e 参数表示后面跟着一个 sed 命令,可以多次使用 。
6、删除某个字符串所在的行
sed '/pattern/d' file.txt
其中,pattern 是要删除的字符串。
7、在某个字符串所在的行前/行后插入一行
sed '/pattern/i new_line' file.txt
其中,pattern 是要插入行的位置,new_line 是要插入的新行。
行后插入行:sed '/pattern/a new_line' file.txt
其中,pattern 是要插入行的位置,new_line 是要插入的新行。
8、替换某个字符串所在的行
sed '/pattern/c new_line' file.txt
其中,pattern 是要替换行的位置,new_line 是要替换成的新行。
9、修改源文件内容
在sed
命令中,如果要替换源文件的内容,需要使用-i
选项。具体用法如下:
sed -i 's/old_text/new_text/g' file.txt
使用 -i 选项会直接修改源文件的内容,因此需要谨慎使用。如果不确定修改后的结果是否正确,可以先使用 -i 选项的备份功能,将源文件备份一份,再进行修改。备份的命令如下:
sed -i.bak 's/old_text/new_text/g' file.txt
其中,.bak 是备份文件的后缀名,可以根据需要修改。执行这个命令会将 file.txt 文件备份为 file.txt.bak,然后将修改后的内容保存到 file.txt 文件中。
10、总结
除了前面提到的替换、删除、插入等基本用法,sed 命令还有一些常用的参数,具体如下:
- -n:只输出经过编辑的那一行(默认情况下,sed 命令会输出所有的行)。
- -e:允许对输入数据应用多个编辑器命令,多个命令之间用分号分隔。
- -f:指定 sed 命令编辑脚本文件。
- -r:启用扩展的正则表达式语法。
- -i:直接修改源文件的内容,替换操作会对源文件进行修改,需要谨慎使用。
- -b:在修改文件之前,为文件创建一个备份文件。
- -u:使用非缓冲输出,即立即输出而不是等到缓冲区填满之后再输出。
- -p:打印模式空间的内容,通常与 -n 选项一起使用。
这些参数可以组合使用,实现更加复杂的操作。例如,可以使用 -ne 参数组合,只输出经过编辑的那一行,并禁止默认输出所有的行。