我有一个文件列表(file1,file2,file3 ...),每个文件都有一个相同的字符串。我试图将字符串更改为1,2,3,...
不确定为什么我的命令似乎没有做任何事情。
for i in {1..200}; do sed 's/foo/bar$i/g' file$1.txt; done
答案 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