找出:路徑必須先於表達式:「.」找出:謂詞「-exec」之後可能不帶引號的模式?

找出:路徑必須先於表達式:「.」找出:謂詞「-exec」之後可能不帶引號的模式?

我需要在後台執行這個指令

sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' \; . &

但我有兩個問題:

find: paths must precede expression: `.'
find: possible unquoted pattern after predicate `-exec'?

再說一次,還有其他聰明的方法可以更快地“查找和替換”,以做到這一點:sudo find '/abc/abc/' -type f -exec sed 's/domain1\it/domain2\com/g' '{}' ; &也許用 grep ?

謝謝

答案1

/abc/abc/現有的目錄嗎?要搜尋的文件在哪裡? 「paths must preceed..」訊息是加密訊息。解碼後意味著第一個(或前幾個)參數find不是要遍歷的目錄樹find。由於其餘參數是“find表達式”,這就是它所抱怨的。

您正在執行的命令-exec需要以分號 ( ) 結尾;。但是,由於分號會終止指令(解析)find-exec因此必須使用反斜線 ( \) 轉義分號。因此

-exec ...command... \; 歡迎來到「尋找」魔法的世界。重新閱讀“人發現”。

你的sed表達方式是錯誤的。它應該是:

 sed -e 's/domain1\.it/domain2\.com/'

反斜線 ( \) 只是翻轉下一個字元上的“特殊處理”標誌,因此domain1\it匹配“ domain1it”,而不是“ domain1.it”。 " \i" 並非特殊,因此視為 " i"。

相關內容