sed是一种流式文本编辑器; 默认情况下,sed的所有处理行为不会影响源文件的内容;
sed
sed [OPTION]...‘script’ [input-file]...
常用选项:
-n, --quiet, --silent:对于不能匹配模式的行,默认不输出到屏幕
-e script, --expression=script:多条件编辑
-f script-file, --file=script-file:从指定的文件中读取脚本
注意:文件为一个能够定位到脚本文件的路径,最好为绝对路径;
-i[SUFFIX], --in-place[=SUFFIX]:源文件直接编辑操作;
-r, --regexp-extended:使sed支持扩展正则表达式;
script部分是由匹配地址与使用命令组成
匹配地址指的是对文件内容所需要操作的行范围
如果为空地址,即为表示对文件的所有行进行处理
如果为单地址,即为对所匹配的那唯一一行进行处理
通常表示地址范围有一下几种:
addr1,addr2:从addr1开始到addr2结束的中间所有行;
first~step:从first标记的行号开始,以step所代表的数字为步长来计算;
例如:1~2 :1 1+2 3+2 5+2...
addr1,+N:从addr1开始,包括addr1所在行,并继续向后计算N行;
例如:2,+7 为2,2+7
addr1,~N:从addr1开始,包括addr1所在行,向后计算addr1*N行;
例如:2,~5 为2,2*5
/pattern1/,/pattern2/:从被pattern1匹配的第一行开始计算,一直到被/pattern2/匹配到的第一行结束;(这一种最常用)
使用命令指的是对所匹配到的行采取的使用的命令
=:显示被模式匹配的行的行号
例如:sed -n '/^$/=' /etc/grub2.cfg 显示空白行的行号
a \text:在被匹配的行的后面追加text的内容,支持使用\n换行,从而实现多行追加;
对上一个空白行后面加上"haha"
i \text: 在被匹配的行的前面追加text的内容,支持使用\n换行,从而实现多行追加
在文件/jiaoben/chess.sh中所有有#的行前面加‘abc’
c \text:在被匹配的行的修改为text的内容,支持使用\n换行,从而实现多行追加
在文件/jiaoben/chess.sh中所有有#的行修改为‘abc’
d:在模式空间中删除被匹配的行,这样的行不能再进行标准输出;
在文件/jiaoben/chess.sh中所有有#的行删除掉
p:显示模式空间中被模式匹配的行;
w filepath: 将模式空间中被模式匹配的行,另存到指定文件中
r filepath: 将filepath文件中的内容追加至模式空间中被模式匹配的行之后
!Command:在模式空间中被模式匹配的行,不执行command命令;没有被匹配的执行command
查找替换功能
s///:查找替换,(/)分隔符可以任意更换,只要相同即可;
s/pattern/text/[control]
例如:s@/etc/fstab@/etc/mtab@
将/etc/fstab替换成/etc/mtab
pattern:计划查找并替换的内容
text:要替换的结果
contro:如何进行替换
g:行内全部替换
p:显示替换成功的行
w filepath:将替换成功的行另存到filepath文件中。
vim中支持后向引用:
s/\(sting\)/&/
s/\(sting\)/\1/