Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex AWK:如何匹配逗号_Regex_Bash_Awk_Sed - Fatal编程技术网

Regex AWK:如何匹配逗号

Regex AWK:如何匹配逗号,regex,bash,awk,sed,Regex,Bash,Awk,Sed,我想从awk返回模式为“C”或“…,C”或“…,C,.*”的行。 例如: 有效的 无效的 我的代码如下: echo G,CC | awk '$0 ~ /^C,+.*|.*,C,*.*/ {print $0}' 输出: 我希望它不会给我任何回报。不幸的是,它将“G,CC”返回给我 我如何解决这个问题 编辑: 根据@Emma和@perreal的回答。我使用了一个较短的命令行来解决我的问题: awk '$0 ~ /^C,.*|.*,C,.*|.*,C$/ {print $0}' 到目前为止,它运

我想从awk返回模式为“C”或“…,C”或“…,C,.*”的行。 例如:

有效的 无效的 我的代码如下:

 echo G,CC | awk '$0 ~ /^C,+.*|.*,C,*.*/ {print $0}'
输出: 我希望它不会给我任何回报。不幸的是,它将“G,CC”返回给我

我如何解决这个问题

编辑: 根据@Emma和@perreal的回答。我使用了一个较短的命令行来解决我的问题:

awk '$0 ~ /^C,.*|.*,C,.*|.*,C$/ {print $0}'
到目前为止,它运行良好。谢谢你的帮助

  • +
    ^C,+.*
    中是不必要的,因为您已经匹配了逗号,并且还匹配了后面的任何内容

  • *,C,*.
    中,第二个逗号后面的
    *
    不正确。它使逗号成为可选的,因此它也可以匹配
    G,CC
    *,
    匹配
    G,
    C,*
    匹配
    CC

这应该起作用:

awk '$0 ~ /^[GCA](,[GCA])*$/ && /C/ {print $0}'
  • +
    ^C,+.*
    中是不必要的,因为您已经匹配了逗号,并且还匹配了后面的任何内容

  • *,C,*.
    中,第二个逗号后面的
    *
    不正确。它使逗号成为可选的,因此它也可以匹配
    G,CC
    *,
    匹配
    G,
    C,*
    匹配
    CC

这应该起作用:

awk '$0 ~ /^[GCA](,[GCA])*$/ && /C/ {print $0}'

你能试试下面的吗

awk '!/CC/ && /^C,+.*|.*,C,*.*/'  Input_file

你能试试下面的吗

awk '!/CC/ && /^C,+.*|.*,C,*.*/'  Input_file

我的猜测是,也许这也会起作用:

awk '$0 ~ /^([A-Z],C,[A-Z]|[A-Z],C|C,[A-Z])$/ {print $0}'
忠告 他建议:


它相当于awk'/^([A-Z],C[A-Z]|[A-Z],C[A-Z])$/'。输出 with print是默认操作,同时匹配 记录


我的猜测是,也许这也会起作用:

awk '$0 ~ /^([A-Z],C,[A-Z]|[A-Z],C|C,[A-Z])$/ {print $0}'
忠告 他建议:


它相当于awk'/^([A-Z],C[A-Z]|[A-Z],C[A-Z])$/'。输出 with print是默认操作,同时匹配 记录

更多选择 换句话说,您想选择“C”作为单词的行吗?如果是,这里有两种解决方案:

grep -w C
grep -E '\<C\>'
更多选择 换句话说,您想选择“C”作为单词的行吗?如果是,这里有两种解决方案:

grep -w C
grep -E '\<C\>'

谢谢你的回复。我试过你的密码。它适用于“G,CC”。但它不能与“G,C”匹配。你有什么建议吗?更新了答案请看一下。谢谢你的回复。我试过你的密码。它适用于“G,CC”。但它不能与“G,C”匹配。你有什么建议吗?更新后的答案请看一下。它相当于
awk'/^([a-Z],C[a-Z]|[a-Z],C[a-Z])$/'
。使用
print
输出是默认操作,同时匹配完整记录。它相当于
awk'/^([A-Z],C[A-Z]|[A-Z],C[A-Z])$/'
。使用
print
输出是默认操作,同时匹配完整记录。可能不查看分隔符,而是关注数据,即如果数据不是单个
C
则无效<代码>sed'/\bC\b/!d'文件。您最后编辑的
*
没有做任何有用的事情(
*
表示零或更多,因此零是一个选项),您可以删除它们。
$0~
{print$0}
也一样。这将给您留下
awk'/^C,|,C,|,C$/'
,可以将其简化为仅限值。可能不需要查看分隔符,而应该关注数据,即如果它不是单个
C
,则它是无效的<代码>sed'/\bC\b/!d'文件。您最后编辑的
*
没有做任何有用的事情(
*
表示零或更多,因此零是一个选项),您可以删除它们。
$0~
{print$0}
也一样。这就给你留下了
awk'/^C,|,C,|,C$/'
,它可以被简化为。好吧,这很短!好吧,那太短了!
awk '"," $0 "," ~ /,C,/ {print}
$ awk '/(^|,)C(,|$)/' file
C,G
G,C
G,C,A