我試圖用另一行替換一行,SED
我MAC OS X Terminal
有一個場景,我需要用另一行替換目錄中存在的所有檔案中的一行。兩條線都很複雜,並且有不同的特殊字元和符號。
我該如何更換它?
我需要更換
import { wait } from 'path/and-child-path'
和
import { wait } from 'path/path/and-child-path'
我正在嘗試的是
find . -type f | xargs sed -i '' "s@import { wait } from 'path/and-child-path'@import { wait } from 'path/and-child-path'@g"
這是行不通的。請幫幫我。
答案1
您sed
提供的具有完全相同的匹配和替換模式(如果不是拼寫錯誤),因此您不能期望文件發生任何更改。此外,該''
位不應該在那裡。
糾正這些觀點,你會以結束
find . -type f | xargs sed -i \
"s@import { wait } from 'path/and-child-path'@import { wait } from 'path/path/and-child-path'@g"
該程式碼仍然會失敗在一般情況下,因為檔案名稱可能包含空格(甚至換行符!)字符,這正是xargs
用作分隔符的字符。因此,如果您擁有該文件A X
,sed
則會指示對文件進行操作A
。X
-exec
選項直接解決了問題:
find . -maxdepth 1 -type f -exec sed -i \
"s@import { wait } from 'path/and-child-path'@import { wait } from 'path/path/and-child-path'@g" {} +
請注意,我還添加了-maxdepth 1
, 否則find
也會下降到子目錄中。