我有2個文件:A.txt,B.txt根據文本文件的名稱查找並替換文本文件中的單詞
這兩個文件都包含字母NODE。
我想在每個A.TXT和B.txt與A_NODE和B_NODE文件分別替換節點。
我知道有一個for循環和sed有關,但無法弄清楚這一個。有什麼建議麼?
我的想法是:
for file in *; do sed -i 's/NODE/$file.NODE/g' file; done
我有2個文件:A.txt,B.txt根據文本文件的名稱查找並替換文本文件中的單詞
這兩個文件都包含字母NODE。
我想在每個A.TXT和B.txt與A_NODE和B_NODE文件分別替換節點。
我知道有一個for循環和sed有關,但無法弄清楚這一個。有什麼建議麼?
我的想法是:
for file in *; do sed -i 's/NODE/$file.NODE/g' file; done
for file in *; do sed -i "s/NODE/$(basename -s .txt file)_NODE/g" file; done
"
)代替單引號('
)使bash的可變內插(替換$
表達)。$(...)
執行任意的外殼命令,並插入結果。basename -s .txt
刪除目錄部分和文件名後綴.txt
。確切的命令不起作用,但基於您的評論,我修改了一下,這確實:'文件在*; do sed -i「s/NODE/$(basename -s .txt」$ file「)_ NODE/g」$ file; done' – aram
謝謝@sapanoia:
這工作:
for file in *; do sed -i "s/NODE/$(basename -s .txt "$file")_NODE/g" $file; done
參見:[Bash中的單引號和雙引號之間的區別(https://stackoverflow.com/q/6697753/3776858) – Cyrus
您是否嘗試過'set -x'或'echo sed -i's/NODE/$ file.NODE/g'file'進行調試? –