有条件地 sed + 如果条件适用则追加到行尾

sed conditionally + append to end of line if condition applied

使用 makefile 和 bash shell 脚本,我最终得到一个变量包含:

--global-option=build_ext --global-option=--b2-args=libtorrent-python-pic=on --global-option=--b2-args=address-model=32

我需要对其进行转换,以便在正确的位置附加双引号,例如:

--global-option=build_ext --global-option=--b2-args="libtorrent-python-pic=on"  --global-option=--b2-args="address-model=32"

我尝试了以下但没有成功:

echo $myvar | sed -e 's/ /\n/' | sed -z '{s/=/="/2;t;s/$/"/}'
--global-option=build_ext
--global-option="--b2-args=libtorrent-python-pic=on

编辑:请注意,这次是 --b2-args=,但这可能是 --anything= 的连词,这也是我关注 = 的第二个实例以更改的原因=" 如果为真,则在单词末尾附加 =

使用sed

sed 's/\(b2-args=\)\([^ ]*\)/""/g' <<< "$myvar"
--global-option=build_ext --global-option=--b2-args="libtorrent-python-pic=on" --b2-args="address-model=32"

因为你的问题没有讨论任何关于前置 --global-option= 的问题,如果它在提供的输入行的最后 --b2-args... 字符串中丢失,我认为你的输入应该是:

$ cat file
--global-option=build_ext --global-option=--b2-args=libtorrent-python-pic=on --global-option=--b2-args=address-model=32

在这种情况下,在每个 Unix 机器上的任何 shell 中使用任何 sed:

$ sed 's/\([^ =]*=[^= ]*=\)\([^ ]*\)/""/g' file
--global-option=build_ext --global-option=--b2-args="libtorrent-python-pic=on" --global-option=--b2-args="address-model=32"