用sed代替n表达式

时间:2015-05-05 16:22:59

标签: regex bash sed

我需要用与以下类似的行中的空格分隔的第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}和其他尝试,但我无法让它运行...

任何帮助将不胜感激!

3 个答案:

答案 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}%")

希望这有帮助。