我有一个文件:
# Allow incoming TCP ports
TCP_IN = "20,21,22,25,53,80,110,143,443,4433,465,587,993,995,3306,9200,8080,8888,10000:20000,"
# Allow outgoing TCP ports
TCP_OUT = "20,21,22,25,53,80,110,113,143,443,465,4433,587,993,995,3306,9200,8080,8888,10000:20000,"
# Allow incoming UDP ports
UDP_IN = "20,21,53,111"
# Allow outgoing UDP ports
# To allow outgoing traceroute add 33434:33523 to this list
UDP_OUT = "20,21,53,113,123,111"
# Allow incoming PING. Disabling PING will likely break external uptime
# monitoring
ICMP_IN = "1"
我想删除,假设从443
开头的行开始TCP_OUT = "
,而不是文件中其他任何地方。
我正在寻找一种sed
或awk
解决方案。
说明:
我不想删除以特定字符串开头的整行,而是要删除以字符串开头的行中的子字符串。例如:我只想删除以443
开头的行中的TCP_OUT = "
我不想删除以TCP_OUT = "
开头的整行
答案 0 :(得分:0)
使用sed中的“地址”仅在特定行上进行替换:
sed '/^TCP_IN /s/\([",]\)443[",]/\1/'
需要[",]
才能正确处理列表中的第一项或最后一项为443的情况。
答案 1 :(得分:0)
您可以使用以下sed
命令:
sed -iE '/^TCP_OUT /s/"443"/""/; s/([",])443,|,443([,"])/\1\2/' file
此sed
检查所有4种可能的情况:
443
是输入中的唯一数字,即"443"
443
开始时,即"443,111,222,333"
443
结尾时,即"987,546,443"
443
位于中间时,即"111,222,333,443,678,123,098"
答案 2 :(得分:0)
使用sed:
sed '/^TCP_OUT/ s/443,*//' file