shell文本处理sed
定义:
sed:stream editor 是一种行编辑器,
Sed的工作原理:
它一次处理一行内容。具体的操作过程为:处理时把当前处理的行存储到临时缓存区,称为“模式空间”接着用sed编辑命令处理缓存区的内容,处理完成后,把缓存区里面的内容送往屏幕,接着来处理下一行,不断地重复,直到文件的末尾。
Sed的优势:
Sed编辑器以批处理的方式来编辑文件,这比交互式编辑器(如vim)要快,可以快速的完成对数据的编辑修改。
可以单独的建立复杂的编辑脚本并作为给 sed 的命令文件,能够减少可观的键入和随之带来的错误。
Sed劣势:
相较于交互式编辑器而言,根本性的损失是缺乏相对地址(由于操作是每次一行的),和缺乏对命令如期运行的立即验证。
sed的使用:
sed命令参数
p ##显示
d ##删除
a ##添加
c ##替换
i ##插入
sed [参数] ‘命令’ file
-e选项(默认情况):
在处理输入时,sed后面直接添加编辑命令
sed -e ‘命令’ file
sed -e 's/root/ROOT/g' /etc/passwd ##将/etc/passwd文件中root替换ROOT
一条编辑命令时,-e选项可以省略。但是当一条sed语句中执行多个编辑命令时,不可以省略
-f选项:
在处理输入时,使用sed脚本。将所用到的sed编辑命令写入一个文件,然后使用sed -f来读取该文件:
vim script.sed
$ cat script.sed
$ s/root/ROOT/g
$ s/bin/BIN/g
$ s/home/HOME/g
sed -f script.sed /etc/passwd
-n选项:
不产生命令输入
sed -n 's/root/ROOT/g' /etc/passwd
使用-n选项不会将内容输出到屏幕上,通常结合p命令使用用来打印被匹配的行
sed -n '/^#/p' /etc/fstab ##将/etc/fstab文件中以#开头的行输出
-i选项:
改变原文件内容
sed -i 's/westos/redhat/' passwd
sed -i 's/westos/redhat/g' passwd ##全局替换
使用sed命令进行文本处理
打印某些内容(n与p命令结合起来使用)
sed -n '/\:/p' /etc/fstab
sed -n '/^#/p' /etc/fstab
sed -n '/^#/!p' /etc/fstab
sed -n '2,6p' /etc/fstab ##打印/etc/fstab中2-6行
sed -n '2,6!p' /etc/fstab ##将/etc/fstab中除了2-6行打印出来
sed -n '1~2p' /etc/fstab ##打印奇数行
sed -n '2~2p' /etc/fstab ##打印偶数行
使用sed命令删除行
sed使用d命令来删除文本中的特定行。
sed '/^UUID/d' /etc/fstab
sed '/^#/d' /etc/fstab
sed '/^$/d' /etc/fstab
sed '1,4d' /etc/fstab
使用sed命令附加文本
sed编辑器使用a命令来向数据流附加文本行,a命令会在指定行后增加一个新行。
sed '/hello/aworld' westos
sed 's/hello/hello world/g' westos
sed 's/hello/hello\nworld/g' westos
使用sed命令替换行
使用c可以将数据流中整行文本修改为新的行
sed ‘/hello/chello world’ westos
使用sed命令插入文本
sed编辑器使用i命令来向数据流中插入文本行,i命令会在指定行前增加一个新行
sed '/hello/iworld\nwestos' westos
使用sed命令处理文件
向文件中写入数据
sed '1,2w test.txt' /etc/passwd
将数据流中的/etc/passwd中的第1,2行写入到文件test.txt中去
从文件中读取数据
使用r命令来将一个文本中的数据插入到数据流中
sed '3 r test.txt' /etc/passwd
将文件test.txt中内容插入到数据流第三行后面