我有一個文件列表(文件1,文件2,文件3 ...),每個文件都有相同的字符串。我試圖改變字符串來讀取1,2,3 ...Linux - 在每個文件中查找並替換爲不同的字符串
不知道爲什麼我的命令似乎沒有做任何事情。
for i in {1..200}; do sed 's/foo/bar$i/g' file$1.txt; done
我有一個文件列表(文件1,文件2,文件3 ...),每個文件都有相同的字符串。我試圖改變字符串來讀取1,2,3 ...Linux - 在每個文件中查找並替換爲不同的字符串
不知道爲什麼我的命令似乎沒有做任何事情。
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
什麼是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
看看的sed的-i選項。 – Cyrus
這可能有所幫助:[Bash中單引號和雙引號之間的區別](http://stackoverflow.com/q/6697753/3776858) – Cyrus
如果我們可以看到這些文件的內容,這可能會更容易回答。 –