sed简单介绍:
sed是一款文本处理工具,称之为“流编辑器”,它的工作机制是,从文件中读取每一行数据放入模式空间中(pattern space),而后通过模式对模式空间中的数据进行匹配,如果匹配则对数据做相应的操作(action),如果不匹配则打印或者不打印,然后继续读取文件下一行的数据,直到数据全部读取完,如图:
sed用法:
用法:
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
选项:
-n, --quiet, --silent:不输出模式空间的内容至屏幕上
-e script, --expression=script:实现多点编辑
-f script-file, --file=script-file:从指定文件中读取编辑脚本,也就是将要执行的操作放入脚本中。
-r, --regexp-extended:支持使用扩展正则表达式
-i[SUFFIX], --in-place[=SUFFIX]:直接对原文件进行编辑(危险操作)
-i.bak: 备份文件并原处编辑
编辑命令:
p:打印模式空间数据
d:删除模式空间数据
a \text:在后一行添加文本
i \text:在上一行添加文本
c \text:将匹配的行替换为指定的数据
w filename:将匹配到的数据存放到文件中
r filename:将文本中的内容追加至匹配到的模式空间后面
sed '/^2/r /etc/passwd' test
=:为模式匹配到的行打印行号
!:模式空间匹配到的行做取反操作
s///:替换操作,其中分割符可以是###、@@@
替换标记:
g:全局替换
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中
p:显示替换成功的行
`地址定界:
空地址:对全文进行处理
单地址:
#:指定位置
/pattern/:对匹配到的行做处理
地址范围:
#,#:对指定的范围做处理
#,+#:在第一个#之上+多少,例如:2,+3== 2,5,表示处理2~5行的数据
/pattern1/,/pattern2/,表示处理模式pattern1~pattern2中的数据
#,/pattern/:表示从第几行~pattern匹配到的行
步进:~
1~2:奇数行(是根据行号来定义的)
2~2:偶数行(是根据行号来定义的)
`
示例:
1)sed -n '2p' test:表示打印第2行的数据
2)sed -n '2p' test:表示打印第2行的数据
3)sed -n -e '2p' -e '5p' test:表示打印第2行跟第5行的数据
4)sed -n -f sedTest test:
5)sed -n -r '/root/p' /etc/passed:打印包含root字符的行
6)sed -i.bak '3d' test:删除第3行的数据
7)sed '2a \etc/passwd' test:在第2行下添加etc/passwd
8)sed '2i \etc/passwd' test:在第2行上面添加一行数据
9)sed '2c \This is a substitution command' test:将匹配到的行替换为指定的文本
10)sed -n '2w test.bak' test:将第2行的数据存储到test.bak文件中
11)sed '2r /etc/passwd' test:将passwd中的数据添加至匹配到的行下面
12)sed '/root/=' test:为匹配的行显示行号
13)sed '2!p' test:取反操作,显示不被匹配到的行
14)sed 's@root@Just for testing purposes@g':全局替换,替换匹配到的root字符
15)sed -n '2,5p' test:只显示第2行~第5行的数据
16)sed -n '2,+3p' test:同上
17)sed -n '/root/,/ftp/p' /etc/passwd:显示passwd文件中行首为root~行首为ftp的所有数据
18)sed -n '1~2p' test:显示行号为奇数的所有行
19)sed -n '2~2p' test:显示行号为偶数的所有行
Thanks