sed - 替换所有以

sed - replace all strings that begin with

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

rs12345 100
rs54321 200
300 rs13579

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

100
200
300

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

12345 100
54321 200

即仅删除 rs.

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

您可以将 rs 到 space 替换为空字符串,以便删除 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

注意我不是在处理白色space,因为你提到你稍后会处理它。如果你需要它,你可以说 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

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