总结linux中sed命令的使用方法

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

linux之sed命令:

1 初识sed

sed编辑器被称作流编辑器,它和vim这种的交互式文本编辑器不同,是根据命令来处理数据流中的数据。会执行下列操作:

一次从输入中读取一行数据(重复该操作直到全部行被读取完)

根据编辑器命令匹配数据

按照命令修改数据流中的数据

将新数据输出到STDOUT(标准输出)

其中sed命令的可以从命令行中输入,也可以从一个命令文件中读取。

sed -e script 添加script中指定的命令 sed -f file 添加file中指定的命令

1.1 在命令行定义sed命令

来看一个简单的文本替换示例:

echo “hi,my name is xxx” | sed s/xxx/kinsomy/ #修改文件 sed s/xxx/kinsomy/ data.txt #执行多个命令 用-e选项,分号隔开 sed s/xxx/kinsomy/; s/***/hhh/ data.txt

将echo输出的数据通过管道输入sed中,然后用s命令进行替换,用第二个斜杠后的数据替换掉第一个斜杠后匹配的数据。

注意:sed操作文本文件中的数据,仅仅是将修改的数据输出到STDOUT,但是并不会修改文件本身的数据

1.2 从文件读取命令

在一个文件script.sed中定义一系列的命令,方便复用。

s/*/a s/x/b s/-/+



# -f选项指定命令文件 sed -f script.sed data.txt

2 sed基础

2.1替换标记

上面的例子echo “hi,my name is xxx” | sed s/xxx/kinsomy/只会替换每一行中匹配到的第一个数据,但是一行数据中若有多个匹配项,则不能全部被替换掉。

echo “hi,my name is xxx, i am xxx” | sed s/xxx/kinsomy/ #输出 hi,my name is kinsomy, i am xxx

这个时候可以使用一些替换标记substitution flag来设置替换的模式。替换标记跟在替换字符串之后。

s/pattern/replacement/flags

数字,表示将替换掉第几处被匹配到的数据

echo “hi,my name is xxx, i am xxx” | sed s/xxx/kinsomy/2 #输出 第二个xxx被替换成kinsomy hi,my name is xxx, i am kinsomy

g,表示替换所有匹配到的数据

echo “hi,my name is xxx, i am xxx” | sed s/xxx/kinsomy/g #输出 第二个xxx被替换成kinsomy hi,my name is kinsomy, i am kinsomy

p,表示会打印出被匹配出来的行

echo “hi,my name is xxx, i am xxx” | sed s/xxx/kinsomy/p #输出 hi,my name is kinsomy, i am xxx hi,my name is kinsomy, i am xxx w,将替换后输出保存到指定文件 echo “hi,my name is xxx, i am xxx” | sed s/xxx/kinsomy/w output.txt

2.3 行寻址

上文说到sed命令是一行行读取文本,进行匹配操作数据,知道所有行被遍历完,如果这时候我们想要对特定的行做操作就要使用行寻址。 行寻址有两种形式:

数字形式表示行

# 操作单行 $ sed 2s/xxx/***/ data.txt # 操作一定行区间[2,4] $ sed 2,4s/xxx/***/ data.txt # 操作某行开始到最后[2,endline] $ sed 2,$s/xxx/***/ data.txt

文本模式过滤器

首先在/etc/passwd内找到kinsomy的记录,然后将bash替换为csh。文本模式过滤器配合正则表达式会很强大。

sed /kinsomy/s/bash/csh/ /etc/passwd

2.4 删除行

使用删除命令d对文本进行删除操作。

# 删除所有文本 sed d data.txt # 删除单行 sed 2d data.txt # 删除行区间[2,3] sed 2,3d data.txt # 删除行区间[2,endline] sed 2,$d data.txt # 删除匹配文本aa的行 sed /aa/d data.txt # 删除两个匹配文本之间的文本 匹配到1和3的行之间的文本全部被删除 sed /1/,/3/d data.txt

2.5 插入、附加文本

插入命令i在指定行前增加新行

附加命令a在指定行后增加新行

# 追加 echo “Line 2” | sed a pipe quote> Line 1 #插入 echo “Line 2” | sed i pipe quote> Line 1

2.6 修改行

c命令用来修改一行数据

# 修改第三行文本 sed 3c pipe quote> change line data.txt

2.7 转换命令

命令格式 sed y/inchar/outchar

将inchar中的字符一一对应地转换成outchar的字符

echo “This 1 is a test of 1 try.” | sed y/123/456/ # 输出 This 4 is a test of 4 try.
免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容