sed字符串处理用法

在LINUX系统中, 经常要碰到关于字符串的处理, 这里介绍两种非常强大的命令:AWK与SED, 正确的使用它们, 能够达到事半功倍的效果。

SED

sed会一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为”模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

语法

sed [选项] ‘command’ 文件名称
选项部分,常见选项包括-n,-e,-i,-f,-r选项。
command部分包括:[地址1,地址2] [函数] [参数(标记)]

-n:

表示采用安静模式, 不会将处理的结果显示在标准输出;

-e:

表示使用一个或者多个子命令进行处理。
实例:
echo -e ‘hello world’ | sed -e ‘s/hello/A/’ -e ‘s/world/B/’
结果:A B

-i:

sed默认会把输入行读取到模式空间,简单理解就是一个内存缓冲区,sed子命令处理的内容是模式空间中的内容,而非直接处理文件内容。因此在sed修改模式空间内容之后,并非直接写入修改输入文件,而是打印输出到标准输出。如果需要修改输入文件,那么就可以指定-i选项。

实例:
[root@localhost]# cat file.txt
[root@localhost]# hello world
[root@localhost]# sed -i ‘s/hello/A/’ file.txt
[root@localhost]# cat file.txt
A world

-f:

将指定的命令放进一个文件里面。
[root@localhost]# cat cmd.sh
s/hello/A/
s/world/B/
[root@localhost]#echo “hello world” | sed -f cmd.sh
结果:A B

替换命令
sed 's/test/mytest/g' example

在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。

sed -n 's/^test/mytest/p' example

-n选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。

sed 's/^mytest/&localhost/' example

&符号表示替换换字符串中被找到的部份。所有以mytest开头的行都会被替换成它自已加localhost,变成mytestlocalhost。

sed 's#10#100#g' example

不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。

删除命令
sed '2d' example

删除example文件的第二行。

sed '2,$d' example

删除example文件的第二行到末尾所有行。

sed '$d' example

删除example文件的最后一行。

sed '/test/'d example

删除example文件所有包含test的行。

sed -e '/^$/d' example

删除所有的空行

打印命令
sed -n '2p'  example

打印example文件内第二行

sed -n '1,3p'  example

打印example文件内的第1~3 行

sed -e '/music/=' example

查找包含music的行并打印;

添加行
sed '1a testing' example

第一行后增加字符串testing

sed '1,3a testing' example

第1~3行后增加字符串testing

替换一行或多行
sed '1c Hello' example 

第一行代替为Hello

sed '1,3c Hello' example 

第1~3行代替为Hello

猜你喜欢

转载自blog.csdn.net/baijiwei/article/details/81607138