Awk 文本处理:sed向后工作以删除字符串
我的AWK脚本根据使用它的文本文件生成以下2个输出中的1个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:,它会停止并删除之后的所有内容。有没有一种从右
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