我的文件中包含很多这样的数据,我必须删除与此正则表达式[-]+\d+(.*)
匹配的所有内容
输入:
zxczxc-6-9hw7w
qweqweqweqweqwe-18-8c5r6
asdasdasasdsad-11-br9ft
输出应为:
zxczxc
qweqweqweqweqwe
asdasdasasdsad
如何使用AWK做到这一点?
答案 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
正则表达式表示。请注意,我在这里使用g
和gsub
来替换所有不重叠字符串。
由于OP中正则表达式的性质,即它以.*
结尾,因此可以g
删除。它还使我们能够编写与字段分隔符一起使用的其他awk
解决方案:
awk -F '-+[0-9]' '{print $1}' file