您好我想在文件中的任何地方找到所有字符串,以字母rs
开头,即
rs12345 100
rs54321 200
300 rs13579
并删除所有以条件开头的字符串,以便我得到:
100
200
300
即。没有任何东西替换字符串。我不会在最终输出之前引导空白,因为我稍后会处理它。我试过了sed 's/rs*//g'
然而这给了:
12345 100
54321 200
即。仅删除rs
。
如何编辑sed命令以删除整个字符串?感谢
答案 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