用 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
我需要在类似于以下的行中替换由 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