sed - 替换所有以

bru*_*lin 0 replace sed

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

rs12345 100
rs54321 200
300 rs13579
Run Code Online (Sandbox Code Playgroud)

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

100
200
300
Run Code Online (Sandbox Code Playgroud)

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

12345 100
54321 200
Run Code Online (Sandbox Code Playgroud)

即只删除rs.

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

fed*_*qui 5

您可以用rs空字符串替换从开始到空格,以便rsXXX删除。

sed 's/^rs[^ ]*//' file
Run Code Online (Sandbox Code Playgroud)

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

sed 's/\brs[^ ]*//' file
Run Code Online (Sandbox Code Playgroud)

\b作为词边界的作品,所以像hellorshello不匹配的东西。

测试

$ cat a
rs12345 100
rs54321 200
hellooo 300
$ sed 's/^rs[^ ]*//' a
 100
 200
hellooo 300
Run Code Online (Sandbox Code Playgroud)

注意我不是在处理空格,因为你提到你稍后会处理它。如果你需要它,你可以说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
Run Code Online (Sandbox Code Playgroud)

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