[Linux] sed的一些功能

[Linux] sed的一些功能

Date: 2020.06.20

Author:Xin Pan

U p d a t e : 2020.07.10 \color{red}Update: 2020.07.10 Update:2020.07.10


问题1. sed 删除含有特定字符的行

Linux 系统下。假设我们现在有wav.scp这个文件,其内容是:

G0200_DTM1_050_ahead_000_G0200_S1001 /e/multiASR/egs/micArray/s5/G0200/session01/DTM1_050_ahead_000_G0200_S1001_00.wav
G0200_DTM1_050_ahead_000_G0200_S1004 /e/multiASR/egs/micArray/s5/G0200/session01/DTM1_050_ahead_000_G0200_S1004_00.det
G0200_DTM1_050_ahead_000_G0200_S1002 /e/multiASR/egs/micArray/s5/G0200/session01/DTM1_050_ahead_000_G0200_S1002_00.wav
G0200_DTM1_050_ahead_000_G0200_S1003 /e/multiASR/egs/micArray/s5/G0200/session01/DTM1_050_ahead_000_G0200_S1003_00.det

我们希望将其中包含有.det的行全部去掉

解决

sed -e ‘/.det/d’ wav.scp >wav.scpnew

这句命令是删除wav.scp中的带有“.det”的行,并且不改变输入文件,输出重定向到wav.scpnew

得到结果:

G0200_DTM1_050_ahead_000_G0200_S1001 /e/multiASR/egs/micArray/s5/G0200/session01/DTM1_050_ahead_000_G0200_S1001_00.wav
G0200_DTM1_050_ahead_000_G0200_S1004 /e/multiASR/egs/micArray/s5/G0200/session01/DTM1_050_ahead_000_G0200_S1004_00.det
G0200_DTM1_050_ahead_000_G0200_S1002 /e/multiASR/egs/micArray/s5/G0200/session01/DTM1_050_ahead_000_G0200_S1002_00.wav

问题2. sed去掉文件中的所有选中符号

现有文件,我希望将其中的所有符号去掉。

asdasdads....///
asdads1111()()

解决

sed -i 's/[,.、();,。();:“”:/《》?`"‘’[]? ]//g' input_filename

得到结果:

asdasdads
asdads

对于使用的命令

sed -i 's/[这里输入需要去掉的符号]//g' 输入文件名字
这个命令会把结果直接覆盖在输入文件中,而不需要输出重定向

问题3. sed提取有特定字符的行

对于文件我希望将其中包含特定字符的行取出来。

1 111_00 G1
2 222_00 G2
3 333_00a G3

解决

sed -n '/\_00 G/p' input_file

得到如下的结果:

panxin@panxin-msi:~/桌面$ sed -n '/\_00 G/p' text 
1 111_00 G1
2 222_00 G2

这个命令会把结果输出在屏幕上,需要重定向。

sed -n '/需要提取的特定字符,有符号需要转义/p' 输入文件

问题4. sed提取特定字符结尾的行

对于文件我希望将其中以特定字符结尾的行取出来。

1 111_00.wav
2 222_00.wav
3 333_00.wav
4 444_01.ddd

解决

sed -n '/\_00.wav$/p' input_file

相比问题3的命令只是多了一个$符号,其他完全一致。

panxin@panxin-msi:~/桌面$ sed -n '/\_00.wav$/p' text 
1 111_00.wav
2 222_00.wav
3 333_00.wav

问题5. sed删除两个符号之间的全部字符

sed -i 's/【.*】//g' input_file

解决

[panxin@localhost all]$ echo "G0499_DTM2_500_ahead_000_G0499_S5800 【aasd2222】九万八千五百六十六美元"|sed  's/ 【.*】/g' 
G0499_DTM2_500_ahead_000_G0499_S5800九万八千五百六十六美元
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值