使用 SED MAC 遞歸替換所有檔案中包含特殊字元的行

使用 SED MAC 遞歸替換所有檔案中包含特殊字元的行

我試圖用另一行替換一行,SEDMAC 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 Xsed則會指示對文件進行操作AX

-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也會下降到子目錄中。

相關內容