用 sed 替换第 n 个表达式

substitute n'th expression with sed

我需要在类似于以下的行中替换由 spaces 分隔的第 n 个表达式:

%ABC 999 123 "-234" AAA
%999 123 "ABC" 456 BBB

每个表达式可以包含的内容没有规定,只是用 space 分隔。我需要用给定的字符串替换第 n 个(为了示例,说第 4 个表达式),例如:(将第 4 个表达式更改为 666)

%ABC 999 123 "-234" AAA  ----> %ABC 999 123 666 AAA
%999 123 "ABC" 456 BBB ------> %999 123 "ABC" 666 BBB

我正在使用 linux,我无法让 sed 执行此操作。我尝试了 grepping for %(.* ){5} 和其他尝试,但我无法得到它 运行...

如有任何帮助,我们将不胜感激!

这是一个可能有用的单行本。

假设:

string='%ABC 999 123 "-234" AAA'
new_val=666
element=4

尝试替换第 4 个元素可以在 bash 中使用 "sed" 和 "cut"

完成
replaced_string=$(echo ${string} | sed "s%$(echo ${string} | cut -d\  -f${element})%${new_val}%")

希望对您有所帮助。

$ awk '{=666}1' file
%ABC 999 123 666 AAA
%999 123 "ABC" 666 BBB

$ sed 's/[^ ]\+/666/4' file
%ABC 999 123 666 AAA
%999 123 "ABC" 666 BBB

这可能适合您 (GNU sed):

sed -r 's/\S+/666/4' file