2016-03-25 61 views
0

我正在努力解决另一个问题,这次涉及到重定向输出到一个文件(>)。我有几个文件名为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为每个文件。我至今是:sed输出写入输入文件

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

显然,类似这样的答案已经存在在这里: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-ab.in通过文件foo-abcd.in执行sed更改,并通过foo-abcd2.in输出文件foo-ab2.in(对于bar * .in)。