正则表达式后添加字符串

时间:2017-03-14 19:31:28

标签: regex perl sed

我的文件包含这样的行:

123.45 234.56 A foo
bar boo

作为bash shell脚本的一部分,我想替换一个后面的空格 用另一个字符串编号(XYZ,让我们说)。我能做到这一点 替换所有空格(不好)

sed 's/ /XYZ/g' foo.txt

或者我可以做到这一点,取代正确的空间,但也摆脱了 最后一位数(也没有好处)

perl -pe 's/\d /XYZ/g' foo.txt

我怎样才能达到我之后的效果?

1 个答案:

答案 0 :(得分:1)

根据您的尝试判断,您需要在数字后面替换单个空格。

使用sed的以下表达式就足够了:

sed 's/\([0-9]\) /\1XYZ/g'

请参阅online demo

\([0-9]\)捕获组匹配数字并将其存储在内存缓冲区中,空间只是匹配。替换模式包含存储在组1缓冲区内的值的backreference,因此数字不会丢失,但会在结果中恢复。

请注意,如果您需要在使用XYZ的数字后替换所有后续空格,则可以使用

sed 's/\([0-9]\)  */\1XYZ/g'

sed 's/\([0-9]\) \+/\1XYZ/g'