sed命令不起作用

时间:2012-03-17 06:51:37

标签: regex shell sed

pushd tests
mkdir -p $RPM_BUILD_ROOT%{_bindir}
for foo in $(make check-programs) ; do
 install -m 0755 .libs/$foo $RPM_BUILD_ROOT%{_bindir}
done
popd

sed命令:

sed -i 's@for foo in $(make check-programs)@for foo in dristat drmstat@g'

O / P:

for foo in dristat drmstat$(make check-programs) ; do

预期:

for foo in dristat drmstat ;do

有人能告诉我我做错了吗?

2 个答案:

答案 0 :(得分:2)

Re: sed -i的@ for foo in $(make check-programs)@for foo in dristat drmstat @ g'

我怀疑这不是你的实际剧本。你有机会获得双引号吗?

# as in:
sed -i "s@for foo in $(make check-programs)@for foo in dristat drmstat@g"

现在你有一个未转义的命令替换:$(make ...)。假设这在您正在执行此sed作业的环境中运行,并且不生成任何输出。那个论点的扩展是:

s@for foo in @for foo in dristat drmstat@g

这将产生:

for foo in dristat drmstat$(make check-programs) ; do

答案 1 :(得分:0)

请获取文件cat file1|sed 's/\$\(make check-programs\)//g' 中的数据,然后使用此命令:

\

$(之间以及programs)之间有{{1}}

感谢。