总结linux中sed命令的使用方法
linux之sed命令:
1、初识sed
sed编辑器被称作流编辑器,它和vim这种的交互式文本编辑器不同,是根据命令来处理数据流中的数据。会执行下列操作:
一次从输入中读取一行数据(重复该操作直到全部行被读取完)
根据编辑器命令匹配数据
按照命令修改数据流中的数据
将新数据输出到STDOUT(标准输出)
其中sed命令的可以从命令行中输入,也可以从一个命令文件中读取。
sed-escript添加script中指定的命令sed-ffile添加file中指定的命令
1.1 在命令行定义sed命令
来看一个简单的文本替换示例:
echo"hi,mynameisxxx"|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/*/as/x/bs/-/+#-f选项指定命令文件sed-fscript.seddata.txt
2、sed基础
2.1替换标记
上面的例子echo "hi,my name is xxx" | sed 's/xxx/kinsomy/'只会替换每一行中匹配到的第一个数据,但是一行数据中若有多个匹配项,则不能全部被替换掉。
echo"hi,mynameisxxx,iamxxx"|sed's/xxx/kinsomy/'#输出hi,mynameiskinsomy,iamxxx
这个时候可以使用一些替换标记substitution flag来设置替换的模式。替换标记跟在替换字符串之后。
s/pattern/replacement/flags
数字,表示将替换掉第几处被匹配到的数据
echo"hi,mynameisxxx,iamxxx"|sed's/xxx/kinsomy/2'#输出第二个xxx被替换成kinsomyhi,mynameisxxx,iamkinsomy
g,表示替换所有匹配到的数据
echo"hi,mynameisxxx,iamxxx"|sed's/xxx/kinsomy/g'#输出第二个xxx被替换成kinsomyhi,mynameiskinsomy,iamkinsomy
p,表示会打印出被匹配出来的行
echo"hi,mynameisxxx,iamxxx"|sed's/xxx/kinsomy/p'#输出hi,mynameiskinsomy,iamxxxhi,mynameiskinsomy,iamxxx
w,将替换后输出保存到指定文件
echo"hi,mynameisxxx,iamxxx"|sed's/xxx/kinsomy/woutput.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"Line2"|sed'a\\pipequote>Line1'#插入echo"Line2"|sed'i\\pipequote>Line1'
2.6 修改行
c命令用来修改一行数据
#修改第三行文本sed'3c\\pipequote>changeline'data.txt
2.7 转换命令
命令格式 sed 'y/inchar/outchar'
将inchar中的字符一一对应地转换成outchar的字符
echo"This1isatestof1try."|sed'y/123/456/'#输出This4isatestof4try.
产品猿社区致力收录更多优质的商业产品,给服务商以及软件采购客户提供更多优质的软件产品,帮助开发者变现来实现多方共赢;
日常运营的过程中我们难免会遇到各种版权纠纷等问题,如果您在社区内发现有您的产品未经您授权而被用户提供下载或使用,您可按照我们投诉流程处理,点我投诉;
本文来自用户发布投稿,不代表产品猿立场 ;若对此文有疑问或内容有严重错误,可联系平台客服反馈;
部分产品是用户投稿,可能本文没有提供官方下下载地址或教程,若您看到的内容没有下载入口,您可以在我们产品园商城搜索看开发者是否有发布商品;若您是开发者,也诚邀您入驻商城平台发布的产品,地址:点我进入;
如若转载,请注明出处:https://www.chanpinyuan.cn/41906.html;