繁体   English   中英

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

[英]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则表达式表示。 注意我在这里使用ggsub来替换所有不重叠的字符串。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM