如何使用 sed 將整行替換為另一行包含字元的行

如何使用 sed 將整行替換為另一行包含字元的行

該文件第 19 行包含以下內容

send -- "[email protected]\r"

我想更改電子郵件,所以我想出了這個

sed -i.bak '19s/.*/send -- "[email protected]\r"/' ./a

它確實改變了第 19 行,但我得到的是

"end -- "[email protected]

出了什麼問題以及如何解決?

答案1

反斜線是模式中的轉義字符sed,因此文字已插入回車符。你想要的是\\r- 一個轉義的反斜杠,後面跟著一個文字r

答案2

您只需更改第 19 行即可,而不是進行搜尋和替換:

sed '19c\send -- "[email protected]\\r"'

答案3

您使這變得比實際需要的更加困難 - 只需更改電子郵件地址,而不是整行。展示:

$ echo 'send -- "[email protected]\r"'  | sed 's/old@example\.com/[email protected]/'
send -- "[email protected]\r"

順便說一句,如果搜尋模式可能在一行中多次出現,您可以選擇g在命令末尾使用(全域)修飾符,和/或如果您想要不區分大小寫的搜索,則可以使用(忽略大小寫)修飾符- 例如兩者同時使用:.s///is/old@example\.com/[email protected]/ig

無論如何,您的命令將如下所示:

sed -i.bak '19s/old@example\.com/[email protected]/' ./a

如果您不知道要變更的確切行號,請指定正規表示式作為行位址而不是行號:

sed -i.bak '/^send.*old@example\.com/ s/old@example\.com/[email protected]/' ./a

更改所有出現的情況甚至更容易[電子郵件受保護]在文件中,只需不必指定地址,替換就會發生在文件的每一行上。

sed -i.bak 's/old@example\.com/[email protected]/' ./a

相關內容