[英]Delete string from line that matches regex with AWK
我的文件包含大量这样的数据,我必须删除与此正则表达式匹配的所有内容[-]+\d+(.*)
输入:
zxczxc-6-9hw7w
qweqweqweqweqwe-18-8c5r6
asdasdasasdsad-11-br9ft
Output 应该是:
zxczxc
qweqweqweqweqwe
asdasdasasdsad
如何使用 AWK 做到这一点?
AFAIK awk
不支持\d
所以你可以使用[0-9]
,你的正则表达式是正确的,你需要把它放在正确的 function 的awk
中。
awk '{sub(/-+[0-9].*/,"")} 1' Input_file
您不需要在[0-9]
之后的额外 <加号> 符号,因为这已包含在.*
sed
可能更容易......
$ sed -E 's/-+[0-9].*//' file
请注意.*
涵盖+.*
通常,如果要删除与正则表达式匹配的字符串,则只需将其替换为空字符串即可。 最直接的解决方案是sed
提出的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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.