sed - 替换所有以。开头的字符串

时间:2015-04-29 09:14:54

标签: replace sed

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

rs12345 100
rs54321 200
300 rs13579

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

100
200
300

即。没有任何东西替换字符串。我不会在最终输出之前引导空白,因为我稍后会处理它。我试过了sed 's/rs*//g'然而这给了:

12345 100
54321 200

即。仅删除rs

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

单词成为一个以单词分隔符\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