該文件第 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///
i
s/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