【问题标题】:Regexp to catch string between first and second comma, where there's alphabetical character in number正则表达式捕获第一个和第二个逗号之间的字符串,其中数字中有字母字符
【发布时间】:2015-10-30 15:08:09
【问题描述】:

首先,我必须提一下我的母语是法语,所以我可能会犯英语错误!

我尝试使用 sed 捕获并删除 CSV 文件中第二项包含其他字符的行,然后是数字。

这是一个 OK 行的示例:

2323421,9781550431209,,2012-07-24 13:30:57,False,2012-07-01 00:00:00,False,118,,1,246501

必须删除的一行:

1901461,3002CAN,,2010-09-29 13:46:59,True,,True,,,,

2977837,9782/76132396,,2015-04-27 10:14:47,True,2015-04-26 00:00:00,True,,,,

等等……

说实话,我不确定这是否可行!

谢谢!

【问题讨论】:

    标签: regex csv sed


    【解决方案1】:

    这里使用sed

    sed -e '/^[^,]*,[^,]*[^0-9,]/d'
    

    模式分解:

    ^ 行首

    [^,]*, 包含第一个逗号的所有内容

    [^,]* 不是逗号的所有内容

    [^0-9,]至少一个非数字或逗号的字符

    【讨论】:

    • 感谢您的帮助!
    【解决方案2】:

    使用 awk 你可以做到这一点:

    awk -F, '$2 ~ /^[[:digit:]]+$/' file
    

    或者(感谢@ghoti):

    awk -F, '$2 !~ /[^[:digit:]]/' file
    

    只获取第二列是整数的行。

    或者使用sed你可以这样做:

    sed -i.bak '/^[^,]*,[[:digit:]]*[^,[:digit:]]/d' file
    

    【讨论】:

    【解决方案3】:

    Perl:

    perl -F, -lane 'print if $F[1] =~ /^\d+$/' file

    -a 自动拆分行到数组 @F,字段以 0 开头
    -F, 使用逗号拆分行
    仅当字段 1 仅包含数字时才打印该行:/^\d+$/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-08
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多