【问题标题】:sed - replace all strings that begin withsed - 替换所有以
【发布时间】:2015-04-29 17:39:54
【问题描述】:

您好,我想在文件中的任何位置查找以字母 rs 开头的所有字符串,即

rs12345 100
rs54321 200
300 rs13579

并删除所有以条件开头的字符串,以便我得到:

100
200
300

即将字符串替换为空。我不担心在最终输出之前先导空格,因为我稍后会处理它。我试过sed 's/rs*//g' 但是这给出了:

12345 100
54321 200

即只删除rs

如何编辑我的 sed 命令以删除整个字符串?谢谢

【问题讨论】:

  • 仅在行首或文件中的任何位置?
  • @brucezepplin 哦,我以为它只是在文件的开头。刚刚更新也是这样做的。

标签: replace sed


【解决方案1】:

您可以用空字符串替换从开头的rs 到一个空格,以便删除rsXXX

sed 's/^rs[^ ]*//' file

这假设您的rs 位于行首。如果rs 可以出现在文件中的任何位置,请使用:

sed 's/\brs[^ ]*//' file

\b 用作单词边界,因此 hellorshello 之类的内容不匹配。

测试

$ cat a
rs12345 100
rs54321 200
hellooo 300
$ sed 's/^rs[^ ]*//' a
 100
 200
hellooo 300

注意我不是在处理空格,因为你提到你稍后会处理它。如果你需要它,你可以说sed 's/^rs[^ ]* \+//' file

rs 任何地方:

$ cat a
rs12345 100
rs54321 200
hellooo 300
and rs12345 100
thisrsisatest 24
$ sed 's/\brs[^ ]*//' a
 100
 200
hellooo 300
and  100
thisrsisatest 24

请注意,您当前的方法不起作用,因为 rs* 您是在说:r 后跟 0 个或多个 s

【讨论】:

  • 这似乎在行以感兴趣的字符串开头时起作用,但是如果字符串出现在第 2 列中,这似乎不起作用。我将编辑我的问题以反映这一点
  • 是的,我刚刚看到您在问题中的评论并更新了我的方法。
【解决方案2】:

word 是一个以断字 \b 开头并包含字符 \w 的模式(也以 \b 结尾,但我们不需要它)。

删除以 rs 开头的单词的命令是sed -r 's/\brs\w+//g' file

$ cat file
rs12345 100
rs54321 200
ars1234 000
$ sed -r 's/\brs\w+//g' file
 100
 200
ars1234 000

【讨论】:

    猜你喜欢
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多