在字符之后替换所有出现的内容

3

使用 sed,有没有一种方法可以在字符之后替换行中模式的所有出现?

例如,将句号后面的每个空格都替换为下划线,就会将此文本转换为:

k i c k . t h e . b a b y

将其转变为:

k i c k ._t_h_e_._b_a_b_y

谢谢!


“the baby” 之间的点在哪里?您的示例不够清晰,无法说明您想要做什么。 - Jason Hu
对不起,打错字了!请再看一遍。 - Nick Bull
@NickBull,. 后面的所有内容都应该加上 _,对吗? - Andy K
2个回答

3

这个方法可能适用于你(使用 GNU sed):

sed -r ':a;s/(\.[^ ]*) /\1_/;ta' file

将第一个 . 前的空格替换为下划线 _

sed 's/\./&\n/;h;y/ /_/;H;g;s/\n.*\n//' file

使用保留空间进行分治。

那很漂亮,太棒了。 - Nick Bull

1

有一点长,我想不到更短的方法,但效果不错:

sed 'h ; s/[^.]*// ; s/ /_/g ; x ; s/\..*$// ; G ; s/\n//'
                       ^ ^ the pattern to replace

或者使用 awk
awk -F. -vOFS=. '{a=$1 ; $1="" ; gsub(" ","_") ; print a $0}'
                                       ^   ^ the pattern to replace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接