从与AWK匹配正则表达式的行中删除字符串

时间:2020-04-06 14:30:24

标签: awk

我的文件中包含很多这样的数据,我必须删除与此正则表达式[-]+\d+(.*)匹配的所有内容

输入:

zxczxc-6-9hw7w
qweqweqweqweqwe-18-8c5r6
asdasdasasdsad-11-br9ft

输出应为:

zxczxc
qweqweqweqweqwe
asdasdasasdsad

如何使用AWK做到这一点?

3 个答案:

答案 0 :(得分:4)

AFAIK awk不支持\d,因此您可以使用[0-9],只有将正则表达式放在awk的正确功能中才是正确的。 / p>

awk '{sub(/-+[0-9].*/,"")} 1'  Input_file

[0-9]并不需要在.*后面加上额外的符号

答案 1 :(得分:3)

sed可能会更容易...

$ sed -E 's/-+[0-9].*//' file

请注意,.*涵盖了+.*

答案 2 :(得分:0)

通常,如果要删除与正则表达式匹配的 string ,那么您所需要做的就是用空字符串替换它。最直接的解决方案是karafka提出的sed,另一种解决方案是使用RavinderSingh13提出的awk

整体语法如下:

sed -e 's/ere//g' file
awk '{gsub(/ere/,"")}1' file

使用ere正则表达式表示。请注意,我在这里使用ggsub来替换所有不重叠字符串。

由于OP中正则表达式的性质,即它以.*结尾,因此可以g删除。它还使我们能够编写与字段分隔符一起使用的其他awk解决方案:

awk -F '-+[0-9]' '{print $1}' file