我正在努力解决另一个问题,这次涉及将输出重定向到文件(>
)。我有几个名为foo-ab.in foo-abc.in foo-abcd.in bar-ab.in bar-abc.in bar-abcd.in的文件,我想浏览每个文件,更改一些小文件用sed将其中的一部分重写,然后将结果重写为每个文件的foo-ab2.in,foo-abc2.in和foo-abcd2.in。到目前为止我所拥有的是:
for file in foo bar; do sed -n 's/text to change/replacement/ p' $file*.in> &1; done
然而我收到错误:
-bash: syntax error near unexpected token `&'
我知道我可能做错了,但我想完成这个:
for file in foo bar; do sed -n 's/text to change/replacement/ p' $file*.in > $file*2.in; done
其中$file*2.in
与$file.in
的名称完全相同,中间附加了2,但由于有多个foo
带有ab,abc或abcd结尾,我不知道我不知道如何做到这一点。我已经完成了sed
命令,输出的正确文件名就是绊倒我。
答案 0 :(得分:0)
显然,这里已经存在类似的答案:wildcard input files
但为了清楚起见并关闭问题,答案是按如下方式更改命令:
for file in foo*.in bar*.in; do sed -n 's/text to change/replacement p' $file > "${file%.*}"2.in; done
现在它通过文件foo-abcd.in输入文件foo-ab.in,sed会改变,并通过foo-abcd2.in输出文件foo-ab2.in(对于bar * .in也是如此)。