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

Linux-find&;在每个文件中替换为不同的字符串,linux,bash,sed,quoting,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 要在sed字符串中使用变量,需要使用双引号: for i in {1..200}; do sed "s/foo/bar$i/g" file$1.txt; done # Files will not be modifie

我有一个文件列表(file1、file2、file3…),每个文件中都有一个相同的字符串。我正在尝试将字符串改为1,2,3

不知道为什么我的命令似乎什么都没做

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

要在
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.txt
是什么?或者这是一个脚本,
$1
是位置参数?即使这样,我们也不太确定你想做什么。正如其他人所提到的,我认为您需要
-I
标志来更改文件,但它也有助于查看文件中的内容,以及您正试图执行的操作。也许你的意思是
文件$i.txt

但我不确定您到底想做什么,所以最好创建备份文件:

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

看看sed的选项-i。这可能会有帮助:如果我们能看到这些文件的内容,这可能更容易回答。使用
文件$i
,而不是
文件$1