【发布时间】:2021-09-08 14:18:36
【问题描述】:
我正在尝试从数据集中的第 5 列中删除一个随机字符块。
样本数据:
A | 12 | AA | 24 | Test to go and keep 192.168.1.1 > 192.168.2.1 | B
结果应如下所示:
A | 12 | AA | 24 | 192.168.1.1 > 192.168.2.1 | B
到目前为止我有这个:
awk 'BEGIN{FS=OFS="|"} {gsub(".*? 192","", $5 )} 1' file.txt
但是,这会删除最后一场比赛前第 5 列中的所有内容。
代码现在做了什么:
.168.2.11
我需要在第一个匹配之前删除所有内容,而不是最后一个
【问题讨论】:
-
当前 *awk 不支持非贪婪 (
.*?) 匹配,如果您愿意,您可以使用一些内置函数(例如使用 match() 函数)编写自己的 awk 函数匹配其参数中最短的正则表达式,并对 RSTART 和 RLENGTH 进行一些后处理,并与 substr() 结合以删除所需的部分。