linux shell学习之 sed(基本用法)

孤者浪人 提交于 2020-02-17 02:37:08

一、概述
sed是一种流编辑器,与交互式编辑器不同,流式编辑器会在处理数据之前基于预先提供的一组规则来编辑数据流。
sed可以从标准输入(stdin)获取输入,处理结果从标准输出(stdout)输出。sed会一行一行地读入输入,然后按照预设命令对每行数据进行操作,若输入的是一个文件的内容,sed不会在源文件上修改,而只是在标准输出打印结果。
二、用法初涉
1、替换操作

echo "hello world" | sed 's/hello/HELLO/'

结果:hello world会被替换为HELLO world并从标准输出输出,命令‘s’是替换的意思。
2、多命令操作
使用分号隔开多命令

echo "hello world" | sed 's/hello/HELLO/;s/world/WORLD/'

或者直接换行,每行一个命令

echo "hello world" | sed '
>s/hello/HELLO/
>s/world/WORLD/'

两种操作的结果都是把hello world替换为HELLO WORLD。(我看的参考书里面说多命令要加上-e选项,但我没有加也可以完成操作。)
3、将命令存储在文件中
若有很多的命令,可以预先将命令存放在文件中,每行一个操作命令,在sed中使用-f选项指定从该文件中读取命令即可。
比如cmd.sed文件中存放以下命令

s/hello/HELLO/
s/world/WORLD/

echo 'hello world' | sed -f cmd.sed
可完成替换功能。
三、基本操作
1、更多的替换选项

echo "hello hello " | sed 's/hello/HELLO/'
结果:
HELLO hello

该条命令的结果是HELLO hello,sed并没有将所有的小写hello替换为大写HELLO。

echo "hello hello" | sed 's/hello/HELLO/2'
结果:
hello HELLO

加上2会将第二个hello替换为HELLO。

echo "hello hello" | sed 's/hello/HELLO/g'
结果:
HELLO HELLO

g选项会将所有的hello替换为HELLO

echo "hello hello" | sed 's/hello/HELLO/w result.txt'

w选项会让被修改的行被写入到result.txt文件中。
2、地址定位
假设有文件hello.txt,其内容如下:

hello hello
hello hello
hello hello 
hello hello 
this is a test text file

(1)使用数字定位

sed '2s/hello/HELLO/g' hello.txt

结果:

hello hello
HELLO HELLO
hello hello 
hello hello 
this is a test text file

hello.txt文件第二行的所有hello被替换为HELLO

sed '2,3 s/hello/HELLO/g' hello.txt

该操作会对第二行、第三行进行替换。

sed '2,$ s/hello/HELLO/g' hello.txt

该操作会将第二行向后所有的行进行替换。
3、文本定位
除了指定哪一行还可以进行文本模式匹配进行定位。
若有test.txt文件,其内容如下

hello everyone,this is 
a test for the commond 
sed, you can learn how to 
use this commond to finish 
your work.

命令sed '/can/s/learn/LEARN' test.txt
结果:

hello everyone,this is 
a test for the commond 
sed, you can LEARN how to 
use this commond to finish 
your work.

sed会定位到有can字符串的那一行,然后将该行的learn替换为LEARN。如果你了解正则表达式,那么可以使用正则表达式来找到你的目标行,然后进行相关操作。

若要对一行执行多数操作,则使用{}将多个操作命令括起来。

sed '/can/{s/learn/LEARN/;s/how/HOW/}' test.txt

3、删除操作
在sed中不仅可以进行替换操作,还可以进行删除操作’d’,其用法与’s‘差不多。
有rmove.txt文件,其内容如下

this is line 1
this is line 2
this is line 3
this is line 4
this is line 5
sed '2d' remove.txt
结果:
this is line 1
this is line 3
this is line 4
this is line 5

会删除第二行,类似操作还有

sed '2,4d' rmove.txt
sed '2,$d' rmove.txt
sed '/1/d' rmove.txt

4、插入或附加
插入使用i命令,附加使用a命令。两者的区别是,i是在行的前面插入一行,a是在行的后面追加一行,用法同替换、删除差不多,只不过被用来插入的文本要用‘\’开头。

echo "hello hello" | sed '1i\HELLO'
结果:
HELLO
hello
echo "hello hello" | sed "1a\HELLO'
结果:
hello hello
HELLO HELLO

5、改变文本
改变问呗的意思就是替换整行,用法同插入附加差不多,只是用c命令。很简单,我也敲累了,不想举例了。

6、文本操作
使用w命令可以将改变的行输出到指定文件,使用r命令可以将文本插入指定位置。
加入有文件text.txt,内容如下:

hello hello 
hello hello
hello hello
hello hello
echo "111111111111111" | sed '/1/r ./text.txt'
结果:
111111111111111
hello hello
hello hello
hello hello
hello hello
echo "11111111111" | sed '/1/w tmp.txt'
结果:
cat tmp.txt
11111111111

sed的一些最基本的用法就是这些,还有一些高级用法以后再说。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!