我有一个像这样的字符串
AAA: BBB: CCC: DDD: EEE
我需要更换
AAA: BBB: CCC:
和
FF:
所以它看起来像
FFF:DDD:EEE
谢谢。
答案1
使用 GNUsed
和扩展正则表达式 ( -r
),以下内容应该有效:
sed -r "s/^([^:]*:){3}/FFF:/"
或者sed <...> filename.txt
echo "$original_string" | sed <...>
这将替换一个子字符串,该子字符串从行的开头 ( ^
) 开始,连续三次包含由“除冒号 ( [^:]
) 之外的任何内容”组成的模式,后跟一个冒号,模式为FFF:
。
答案2
你可以使用这个:
$ sed -e 's/:/\n/3;s/.*\n/FFF:/' file
这里我们利用 sed 中的功能来实现第 n 次更改,n<=512。此外,换行符保证不会在模式空间中看到,除非它是通过 G、H、N 预先引入的,或者添加了文字换行符,就像我们的例子一样。
这是gnu sed主义。我们对 Posix sed 使用转义文字换行符。