Gnu Sed:空格字符类与行尾字符不匹配

豪猪

格式:abc,后跟空格,或是一行中的最后一个字符。

orig="abc[[:space:]]+";
new=Hello
sed -i -r -e "s|${orig}|${new}|g" ./file ;

文件:

abc
abcd
abc

abc d

执行后:

abc
abcd
abc

Hellod

预期产量:

Hello
abcd
Hello

Hello d

我想念什么?


注意:我想保留空格字符。

以撒

如果要保留空间:

注意:我想保留空格字符。

然后,将它们匹配,但在替换后将它们还原:

 orig='abc([[:space:]]+)'
 new='Hello\1'
 sed -E -e "s|${orig}|${new}|g" ./infile ;

这将生成此输出(要进行就地修改,请添加适当的-i选项):

 Hello  
 abcd  
 Hello   

 Hello d

当然,这是假设文件在某些​​行的末尾有一些空格:

 $ cat infile | sed -n l
 abc  $
 abcd  $
 abc   $
 $
 abc d$

如果还需要正则表达式匹配不以空格结尾的行,则需要更复杂的正则表达式:

 orig='abc([[:space:]]+|$)';
 new='Hello\1';
 sed -E -e "s,${orig},${new},g" ./infile ;

当然,s|||必须更改定界符,s,,,以避免与|正则表达式要求的冲突

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章