【问题标题】:Regex to filter occurrences正则表达式过滤事件
【发布时间】:2023-03-02 21:10:01
【问题描述】:

我正在尝试将奇数出现的分隔符连同相关内容一起放到另一个文件中,但 awk -F \# !'(NF % 2)' < file 没有发生这种情况

以下是示例输入和输出文件,其中# 是分隔符,

输入:

#123456789uyrtghfdjuerstijhbvgd#ytio6745234890
fdjuerstijhbgftre#5555555555555555555555yyyyyy
#reyigdwwiuyt6678890#qeewteuiroprvvcsderjkkkkk

期望的输出:

#123456789uyrtghfdjuerstijhbvgd#5555555555555555555555yyyyyy
#qeewteuiroprvvcsderjkkkkk

【问题讨论】:

  • 那个输出是你想要的输出?
  • 是的,刚刚将其更新为所需的输出

标签: unix awk sed grep


【解决方案1】:

你可以这样做:

awk 'BEGIN{RS=ORS="#"}
     !(NR % 2) {printf("%s%s",ORS,$0)}' file

打印:

#123456789uyrtghfdjuerstijhbvgd#5555555555555555555555yyyyyy
#qeewteuiroprvvcsderjkkkkk

假设您的文件是这样的(^#^ 作为三个字符的分隔符):

$ cat file
^#^123456789uyrtghfdjuerstijhbvgd^#^ytio6745234890
fdjuerstijhbgftre^#^5555555555555555555555yyyyyy
^#^reyigdwwiuyt6678890^#^qeewteuiroprvvcsderjkkkkk

你可以使用gawk(不是POSIX awk)来做:

gawk 'BEGIN{RS="\\^#\\^";ORS="^#^"}
      !(NR % 2) {printf("%s%s",ORS,$0)}' file
^#^123456789uyrtghfdjuerstijhbvgd^#^5555555555555555555555yyyyyy
^#^qeewteuiroprvvcsderjkkkkk

由于gawk 使用正则表达式作为RS 的值,而^ 是正则表达式元字符,因此需要将其转义为固定字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-28
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 2011-05-03
    • 2011-11-10
    相关资源
    最近更新 更多