如何使用 sed 的替換正規表示式模式作為變數?

如何使用 sed 的替換正規表示式模式作為變數?

假設我們有以下內容作為標準輸入(作為範例)

Life is temporary

我希望 sed 將其替換為

Life is permanent

與某個地方的命令類似

sed 's/Life<%XY=.*>temporary/Life%XYpermanent'

當然,我知道上面不是一個有效的命令,它只是作為一個例子。我想將.*匹配的任何內容儲存到變數中,並且想在替換字串中呼叫該變數。

答案1

sed 's/Life\(.*\)temporary/Life\1permanent/'

這裡\1指的是模式中的第一對括號。在這種情況下,它是唯一的對,但通常您可以有更多對,然後您可以使用等\2\3最多\9

括號被轉義。如果沒有\它們,它們就會被字面理解,並且\1不會起作用。如果你使用sed -E那麼它將被反轉:(將是特殊的並且\(將表示一個文字((注意一般來說這不是唯一的區別-E):

sed -E 's/Life(.*)temporary/Life\1permanent/'

這項變更使我們的sed程式碼對人類來說更具可讀性。

相關內容