Linux - 发现&在每个文件中替换为不同的字符串

时间:2017-04-22 17:39:04

标签: linux bash sed quoting

我有一个文件列表(file1,file2,file3 ...),每个文件都有一个相同的字符串。我试图将字符串更改为1,2,3,...

不确定为什么我的命令似乎没有做任何事情。

for i in {1..200}; do sed 's/foo/bar$i/g' file$1.txt; done

2 个答案:

答案 0 :(得分:1)

要在sed字符串中使用变量,您需要使用双引号:

for i in {1..200}; do sed "s/foo/bar$i/g" file$1.txt; done  # Files will not be modified

这只会打印出sed命令的结果。

如果您想在文件中进行实际替换,请使用-i运算符:

for i in {1..200}; do sed -i "s/foo/bar$i/g" file$1.txt; done  # Files will be modified

答案 1 :(得分:0)

命令中的file$1.txt是什么?或者这是一个脚本,$1是位置参数?即便如此,我们还不太确定你要做什么。正如其他人所提到的,我认为您需要-i标志来更改文件,但它也有助于查看文件中的内容,以及您正在尝试做什么。也许你的意思是file$i.txt

但我不确定你要做什么,所以也许最好创建备份文件:

for i in {1..200}; do sed -i.backup "s/foo/bar$i/g" file$i.txt; done