linux文本替换-sed命令

linux中sed是一个很强大的命令,可以实现字符串的编辑以及其他功能,以下是比较常用的几个,希望对你有帮助。

文件中内容的替换

sed -i 's/FAILED\ open\ or\ read/OK/g' check

sed -i '1s/FAILED\ open\ or\read/OK/g' check

#g是全局global的意思,指代所有,如果不加g,则只替换一次

#第二行命令中1是在文本第一行处进行替换

#-i的作用就是将替换应用于源文件,否则只打印输出,为了写入文件,也可以将代码写成sed 's/FAILED\ open\ or\ read/OK/g' check > file

#若字符串中存在空格等其他符号,需要进行转义,加\,如FAILED\ open\ or\ read

若要指定从第几个开始替换,命令为sed-i 's/FAILED\ open\ or\ read/OK/2g' check

#从第二个字符出开始替换

cat regular_express.txt | sed '2,5c No 2-5number'

#c代表行内容的替换,将第2-5行的内容用No 2-5 number来代替

添加文本或字符串

cat regular_express.txt | sed '2a test'

#在第二行后面添加一行,同时输入test,如果在前面一行写入内容,用 sed '2i test'

输出指定行的内容

nl passwd | sed -n '2,5p'

#打印输出2-5行

nl test_file |sed -n '1~2p'

#打印输出奇数行

#1表示从第一行开始,2p表示每隔两行输出文本,即输出奇数行

nl test_file |sed -n '2~2p'

#2表示从第一行开始,2p表示每隔两行输出文本,即输出偶数行

删除行操作

sed '/^$/d' file

# 删除空白行,d表示删除

sed -i '5c\name_' test_file

#-i将操作应用于源文件

#5c表示删除第五行,斜杠\后面表示要保留的文本。也就是说删除第五行除name_之外的所有内容

#test_file表示要执行删除操作的文件

nl regular_express.txt | sed '2,5d'

#输出regular_express.txt内容,显示行号,同时输出内容传递给sed命令,删除2-5行(d表示删除)

格式化输出

echo"this is an example" | sed 's/\w\+/[&]/g'

输出结果[this][is] [an] [example]

#&在此处用来指代前面搜索到的字符

同理,echo "this is an example" |sed 's/\w\+/#&#/g'

输出结果#this##is# #an# #example#

替换指定字符[子串匹配标记]

echothis is a digit 7 number | sed 's/digit \([0-9]\)/\1/'

#将digit7按7输出,输出结果为this is a 7 number

#\([0-9]\)用来匹配要输出的字段,其中字段用()括起来,并且需要转义

#\1代表找到的第一个字段,如果前面的()存在多个,用\1,\2…来引用

暂时就这么多了,希望对你有用处。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180806G1RR7000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券