该文件第 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
在命令末尾使用(global) 修饰符,如果您想要不区分大小写的搜索,则可以选择使用 (ignore case) 修饰符 - 例如同时使用:。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