sed的使用(2)

本文详细介绍了使用sed命令进行文本替换、修改字符串、处理控制字符等高级功能,包括如何利用s命令进行模式匹配与替换,以及如何通过替换选项如g、p、w来实现全局替换、查看替换结果和输出到文件。此外,还展示了如何删除特定字符、处理特殊字符和控制文件格式转换,提供了实用的sed命令实例。
摘要由CSDN通过智能技术生成
9.用新文本替换定位文本
替换命令用替换模式替换指定模式,格式为:
[ address[,address]]s/pattern-to-find/replacement-pattern/[gpwn]
s选项通知sed这是一个替换操作,并查询pattern-to-find,成功后用replacement-pattern替换它。
替换选项如下:
g缺省情况下只替换第一次出现模式,使用 g选项替换全局所有出现模式。
p缺省sed将所有被替换行写入标准输出,加 p选项将使-n选项无效。-n选项不打印输出结果。
w 文件名 使用此选项将输出定向到一个文件。
举例:

将文本中的nurse改变为doctor
sed 's/nurse/doctor/' sed.txt

将$符号去掉
sed 's/\$//' sed.txt  #由于是特殊符号 所以要\

将the变成THE   进行全局改变
sed 's/The/THE/g' sed.txt

输入到文件并且输入到屏幕
sed 's/The/THE/w sed.out' sed.txt

10.使用替换修改字符串
如果要附加或修改一个字符串,可以使用(&)命令, &命令保存发现模式以便重新调用
它,然后把它放在替换字符串里面。这里给出一个修改的设计思路。先给出一个被替换模式,
然后是一个准备附加在第一个模式后的另一个模式,并且后面带有 &,这样修改模式将放在
匹配模式之前。例如, sed语句s/nurse/"Hello"&/p 的结果如下:

在nurse前面加Hello
#sed -n 's/nurse/"Hello" &/p' sed.txt
sed -n 's/nurse/Hello &/p' sed.txt



11.将sed结果写入文件命令
将1,2两行加入到out文件中
 sed '1,2 w out' sed.txt

先匹配nurse  在进行输入
sed '/nurse/ w out' sed.txt


12.处理控制字符
使用sed实现的一个重要功能是在另一个系统中下载的文件中剔除控制字符。

首先建立一个文本dos.txt
12332##DISO##45.12^M
00332##LPSO##23.11^M
01299##USPD##34.46^M

1)首先删除所有的##
sed 's/##*/ /g' dos.txt

2)删除所有行首为0的
sed 's/^0*/ /g' dos.txt

3)去掉末尾的^M
sed 's/\^M//g' dos.txt

最后综合一下 就可以看见一个比较理想的结果了
cat dos.txt | sed 's/##*/ /g'|sed 's/^0*/ /g'|sed 's/\^M//g'

4)去除掐面的数字
sed 's/^[0-9]*//g' dos.txt


当然还可以上出空行
使用/^$/d删除空行


下面是一些特殊的命令形式
[]表示空格, [ ]表示tab键
‘s/\.$//g’        删除以句点结尾行
‘-e /abcd/d’        删除包含 abcd的行
‘s/[][][]*/[]/g’    删除一个以上空格,用一个空格代替
‘s/^[][]*//g’        删除行首空格
‘s/\.[][]*/[]/g’    删除句点后跟两个或更多空格,代之以一个空格
‘/^$/d’            删除空行
‘s/^.//g’        删除第一个字符
‘s/COL\(...\)//g’    删除紧跟 COL的后三个字母
‘s/^\///g’        从路径中删除第一个 \
‘s/[]/[  ]//g’        删除所有空格并用 tab键替代
‘S/^[ ]//g’        删除行首所有 tab键
‘s/[]*//g’        删除所有 tab键

举例:

删除行首的/
echo $PWD | sed 's/^\///g'

向其中添加信息
echo "Jack Hello" | sed 's/Jack /& Li /g'

删除首字母
echo "Hello" | sed 's/^.//g'

获得文件名
echo "jack.txt" | sed 's/.txt//g'
or

echo "jack.txt" | sed 's/.txt$//g'


参考书籍:shell脚本编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值