Awk 文本处理:sed向后工作以删除字符串

Awk 文本处理:sed向后工作以删除字符串,awk,sed,text-processing,Awk,Sed,Text Processing,我的AWK脚本根据使用它的文本文件生成以下2个输出中的1个 49 1146.469387755102 mongodb 192.168.0.8:27017 -p mongodb.database 1 1243.0 jdbc:mysql 192.168.0.8:3306/ycsb -p db.user 我需要一种删除所有超过IP地址的内容的方法,包括端口号 sed的/:[^::///2g' 除了从左到右删除之外,它还可以工作,并且作为一个输出包含2:,它会停止并删除之后的所有内容。有没有一种从右

我的AWK脚本根据使用它的文本文件生成以下2个输出中的1个

49 1146.469387755102 mongodb 192.168.0.8:27017 -p mongodb.database

1 1243.0 jdbc:mysql 192.168.0.8:3306/ycsb -p db.user
我需要一种删除所有超过IP地址的内容的方法,包括端口号

sed的/:[^::///2g'

除了从左到右删除之外,它还可以工作,并且作为一个输出包含2
,它会停止并删除之后的所有内容。有没有一种从右向左反转sed的方法

需要明确的是,每个项目的预期输出为:

49 1146.469387755102 mongodb 192.168.0.8

1 1243.0 jdbc:mysql 192.168.0.8

您可以使用下面的sed命令

sed 's/:[0-9]\{4\}.*//' file


[^:::]*
与任何字符(但不是
)匹配的否定字符类,零次或多次<代码>$匹配行边界的末尾。因此,
:[^:::]*$
匹配从最后一个冒号到结尾的所有字符。用空字符串替换那些匹配的字符将获得所需的输出。

您可以利用Kleene的贪婪特性
*

sed 's/\(.*\):.*/\1/' file
*
消耗尽可能多的能量,同时仍然匹配模式。线路的捕获部分用于替换

或者,使用awk(感谢您的帮助):

将输入和输出字段分隔符设置为冒号,通过递减
NF
删除最后一个字段
1
为真,因此执行默认操作
{print}
NF
条件可防止空行导致错误,在您的情况下,这可能不是必需的,但不会造成伤害

输出任意一种方式:

49 1146.469387755102 mongodb 192.168.0.8

1 1243.0 jdbc:mysql 192.168.0.8 
awk -F: -v OFS=: 'NF{NF--}1' file
49 1146.469387755102 mongodb 192.168.0.8

1 1243.0 jdbc:mysql 192.168.0.8