' SED'命令错误为'未知选项s'

时间:2016-04-15 07:02:05

标签: bash sed makefile

我在Makefile中有以下sed命令:

SNORT_OPTS=`echo -n "--disable-nls --disable-silent-rules --libdir=/usr/lib \
--host=x86_64-linux-gnu --build=x86_64-linux-gnu --enable-gre --enable-targetbased \
--enable-ppm --enable-sourcefire --enable-perfprofiling --enable-zlib \
--enable-non-ether-decoders" | 
sed -e 's/ +/ /'`
sed -e "/OPTIONS :/s/:.*$$/: $$SNORT_OPTS/" -e '/OPTIONS :/a #   SWE built : snort-2.9.8.2' < snort-2.9.8.2/etc/snort.conf | 
sed -f snort.conf.sed > snort-2.9.8.2/etc/snort.conf-new

问题是当Makefile运行时,它会生成以下命令:

SNORT_OPTS=`echo -n "--disable-nls --disable-silent-rules --libdir=/usr/lib \
--host=x86_64-linux-gnu --build=x86_64-linux-gnu --enable-gre --enable-targetbased \
--enable-ppm --enable-sourcefire --enable-perfprofiling --enable-zlib \
--enable-non-ether-decoders" | 
sed -e 's/ +/ /'`
sed -e "/OPTIONS :/s/:.*$/: $SNORT_OPTS/" -e '/OPTIONS :/a #   SWE built : snort-2.9.8.2' < snort-2.9.8.2/etc/snort.conf | 
sed -f snort.conf.sed > snort-2.9.8.2/etc/snort.conf-new

在SNORT_OPTS中,双元($$)已被单一美元($)取代。

哪个错误: sed:-e expression#,char 68:`s

的未知选项

sed命令可以正常使用双倍美元($$)。如何确保Makefile不会替换&#34; $$&#34;使用&#34; $&#34;

1 个答案:

答案 0 :(得分:2)

正如您已经注意到的那样,您可以用另一个美元符号逃脱美元符号:

$$hello

发送到/bin/sh时,它将变为

$hello

所以基本上你只需要逃避两个美元符号:

$$$$

将成为

$$