有条件地 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"
使用 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"