通过sed替换以其他东西开头的行

时间:2018-01-09 05:31:36

标签: regex linux bash sed

我有一个大约200行的文档。其中一个有以下短语:

TCP_IN = "1" "2" "A" "B" "29001" "45000"

我想用这一行替换整行:

TCP_IN = "22, 80, 443, 9000"

我尝试了这些正则表达式操作来定位所需的短语以及之后的所有短语:

sed -i 's/^TCP_IN \= (.*)/TCP_IN \= "22, 80, 443, 9000"/' /etc/csf/csf.conf
sed -i 's/TCP_IN \= (.*)/TCP_IN \= "22, 80, 443, 9000"/' /etc/csf/csf.conf

我告诉计算机“定位我的短语TCP_IN =以及之后的所有内容并将其替换为我将给你的流”,我做错了什么?

2 个答案:

答案 0 :(得分:2)

sed 's/TCP_IN = "1" "2" "A" "B" "29001" "45000"/TCP_IN = "22, 80, 443, 9000"/' file

sed 's/TCP_IN = .*/TCP_IN = "22, 80, 443, 9000"/' file

sed 's/\(TCP_IN =\) .*/\1 "22, 80, 443, 9000"/' file

或使用扩展正则表达式(-E

sed -E 's/(TCP_IN =) .*/\1 "22, 80, 443, 9000"/' file

输出:

TCP_IN = "22, 80, 443, 9000"

答案 1 :(得分:0)

您可以使用下面的sed one liner来实现相同的效果。

sed  '/TCP_IN = "1" "2" "A" "B" "29001" "45000"/s/.*/TCP_IN = "22, 80, 443, 9000"/g’ filename

输出

TCP_IN = "22, 80, 443, 9000"