【问题标题】:gawk string extract between ([:alnum][:alnum][:alnum] and [:alnum])([:alnum][:alnum][:alnum] 和 [:alnum]) 之间的 gawk 字符串提取
【发布时间】:2016-11-25 18:59:40
【问题描述】:

我正在尝试获取"([:alnum][:alnum][:alnum]" and ")" 和字符串本身之间的字符串。事实上,这个想法是清理一个被许多不需要的字符污染的文件。

例如,我有很多行,例如:

bÖÓÄÉ@@@@ø16/11/2016 15H03'09" (ACTA/BN940-RYR71ND/A4067-LIPH-NILDU/1513F270-LEBL-9/B738/M-80/S-81/W/EQ Y/EQ)   ø     ZZZZtA$bÖÓÄÉ

我想要这样的输出:

(ACTA/BN940-RYR71ND/A4067-LIPH-NILDU/1513F270-LEBL-9/B738/M-80/S-81/W/EQ Y/EQ)

我尝试使用这个 gawk 命令,但它根本不起作用:

gawk 'NR > 1 {print $1}' RS='([[:alnum:]]*3' FS=')' $INPUT_FILE

【问题讨论】:

  • 为什么不grep -oP '\(.*\)' inputfile?这将打印() 之间的任何内容。或grep -oP '\(\K.*(?=\))' inputfile,如果您不想在输出中使用( & )
  • 该文件包含许多寄生虫字符,例如“H@@@@A@”,它们被检测为括号......这就是为什么我需要更复杂的模式。

标签: linux awk gawk


【解决方案1】:

这看起来像是 GNU grep 的标准用法:

grep -o '([[:alnum:]]\{3\}.*[[:alnum:]])' file

您的正则表达式语法存在一些问题,我已更正。

-o 选项仅打印该行的匹配部分。

【讨论】:

  • 非常感谢!这正是我所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 2022-01-05
  • 2016-02-11
  • 1970-01-01
相关资源
最近更新 更多