如何使用 sed 將除模式之外的其他字串替換為其他字串?

如何使用 sed 將除模式之外的其他字串替換為其他字串?

在將模式與文件中的另一個字串匹配之前,我需要使用 sed 替換所有內容

我的文件中有各種路徑。無論使用者如何,這些路徑的最後幾個元件都是相同的,但是前幾個元件將會改變。

對於 例如 對於用戶1,該檔案包含以下路徑

build:
   - "/Users/user1/Projects/Stash/sdk/license.txt"

為了用戶2,路徑可以是

build:
   - "/Users/user2/Documents/Work/sdk/license.txt"

最後 2 個組件是“/sdk/license.txt「對於每個用戶來說都是一樣的。

我想用用戶提供的路徑替換這些元件之前的所有內容,因為它特定於該用戶。如何使用 sed 來執行這種替換?我正在使用 Perl 腳本來實現相同的目的。

答案1

您可以簡單地使用反向引用

sed -e 's/\(^[ ]*\- "\)\(.*\)\(\/sdk\/license\.txt"$\)/\1path_with_which_to_be_replaced\3/'

這裡

\(....\)用於分組配對並保存以備將來使用,替換時使用,可以用作\1 \2變數名稱。

所以,根據你的要求,我把線分成三組

\(^[ ]*\- "\)為了space - "

\(.*\)對於要更換的零件,例如/Users/user2/Documents/Work

\(\/sdk\/license\.txt"$\)對於同一部分,即sdk/license.txt"

相關內容