我需要用与以下类似的行中的空格分隔的第n个表达式替换:
%ABC 999 123 "-234" AAA
%999 123 "ABC" 456 BBB
每个表达式可以包含的内容没有规则,只有它是由空格分隔的。我需要用给定的字符串替换第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,我无法做到这一点..我尝试了grepping for%(。*){5}和其他尝试,但我无法让它运行...
任何帮助将不胜感激!
答案 0 :(得分:8)
$ awk '{$4=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
答案 1 :(得分:1)
这可能适合你(GNU sed):
sed -r 's/\S+/666/4' file
答案 2 :(得分:0)
这是一个可能有用的oneliner。
假设:
string='%ABC 999 123 "-234" AAA'
new_val=666
element=4
尝试替换第4个元素可以使用“sed”和“cut”
在bash中完成replaced_string=$(echo ${string} | sed "s%$(echo ${string} | cut -d\ -f${element})%${new_val}%")
希望这有帮助。