sed输出写入输入文件

时间:2016-03-25 11:43:52

标签: redirect stdout filenames

我正在努力解决另一个问题,这次涉及将输出重定向到文件(>)。我有几个名为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命令,输出的正确文件名就是绊倒我。

1 个答案:

答案 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也是如此)。