Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 查找包含某个模式的n次出现的行_Regex_Grep - Fatal编程技术网

Regex 查找包含某个模式的n次出现的行

Regex 查找包含某个模式的n次出现的行,regex,grep,Regex,Grep,我有一个文件,其中包含的行看起来像 A,B,1,2,3,$long,6,"A","",$long,,,,"ABC",,$long,,,, E,F,2,3,4,$long,$long,$long,$long,,,"A","STRING";123456,,,1,2 我的目标是找到包含n个出现的模式“$long”的行 有人知道这场比赛的grep正则表达式吗?你不需要正则表达式。使用awk可以使用$long作为字段分隔符,并检查每行有多少字段: awk -v count=3 'BEGIN {FS="\

我有一个文件,其中包含的行看起来像

A,B,1,2,3,$long,6,"A","",$long,,,,"ABC",,$long,,,,
E,F,2,3,4,$long,$long,$long,$long,,,"A","STRING";123456,,,1,2
我的目标是找到包含n个出现的模式“$long”的行


有人知道这场比赛的grep正则表达式吗?

你不需要正则表达式。使用
awk
可以使用
$long
作为字段分隔符,并检查每行有多少字段:

awk -v count=3 'BEGIN {FS="\\$long"} NF==(count+1)' file
试验
你不需要正则表达式。使用
awk
可以使用
$long
作为字段分隔符,并检查每行有多少字段:

awk -v count=3 'BEGIN {FS="\\$long"} NF==(count+1)' file
试验 应该行得通。您也可以为此使用
grep

grep -E '(.*\$long){4}' file
E,F,2,3,4,$long,$long,$long,$long,,,"A","STRING";123456,,,1,2
应该行得通。您也可以为此使用
grep

grep -E '(.*\$long){4}' file
E,F,2,3,4,$long,$long,$long,$long,,,"A","STRING";123456,,,1,2
但是如果
$long
可以在上下文中出现,而不是作为它自己的字段出现,例如:

A,B,1,2,3,$long,6,"A","",$long,,,,"ABC$longDEF",,$long,,,,
你只想在它自己的领域中计算它,然后你需要更像:

$ awk -F, -v n=3 '{c=0; for (i=1;i<=NF;i++) if ($i=="$long") c++} c==n' file
错:

$ awk -v n=3 'gsub(/\$long/,"&")==n' file
A,B,1,2,3,$long,6,"A","",$long,,,,"ABC",,$long,,,,

$ awk -v n=4 'gsub(/\$long/,"&")==n' file
E,F,2,3,4,$long,$long,$long,$long,,,"A","STRING";123456,,,1,2
A,B,1,2,3,$long,6,"A","",$long,,,,"ABC$longDEF",,$long,,,,
对:

$ awk -F, -v n=3 '{c=0; for (i=1;i<=NF;i++) if ($i=="$long") c++} c==n' file
A,B,1,2,3,$long,6,"A","",$long,,,,"ABC",,$long,,,,
A,B,1,2,3,$long,6,"A","",$long,,,,"ABC$longDEF",,$long,,,,

$ awk -F, -v n=4 '{c=0; for (i=1;i<=NF;i++) if ($i=="$long") c++} c==n' file
E,F,2,3,4,$long,$long,$long,$long,,,"A","STRING";123456,,,1,2
$awk-F,-vn=3'{c=0;for(i=1;i
但是如果
$long
可以在上下文中出现,而不是作为它自己的字段出现,例如:

A,B,1,2,3,$long,6,"A","",$long,,,,"ABC$longDEF",,$long,,,,
你只想在它自己的领域中计算它,然后你需要更像:

$ awk -F, -v n=3 '{c=0; for (i=1;i<=NF;i++) if ($i=="$long") c++} c==n' file
错:

$ awk -v n=3 'gsub(/\$long/,"&")==n' file
A,B,1,2,3,$long,6,"A","",$long,,,,"ABC",,$long,,,,

$ awk -v n=4 'gsub(/\$long/,"&")==n' file
E,F,2,3,4,$long,$long,$long,$long,,,"A","STRING";123456,,,1,2
A,B,1,2,3,$long,6,"A","",$long,,,,"ABC$longDEF",,$long,,,,
对:

$ awk -F, -v n=3 '{c=0; for (i=1;i<=NF;i++) if ($i=="$long") c++} c==n' file
A,B,1,2,3,$long,6,"A","",$long,,,,"ABC",,$long,,,,
A,B,1,2,3,$long,6,"A","",$long,,,,"ABC$longDEF",,$long,,,,

$ awk -F, -v n=4 '{c=0; for (i=1;i<=NF;i++) if ($i=="$long") c++} c==n' file
E,F,2,3,4,$long,$long,$long,$long,,,"A","STRING";123456,,,1,2


$awk-F,-vn=3'{c=0;for(i=1;我可能是个主意。粗略地说,我想到了类似于
grep“\(.*\$long\){5}”文件的东西。这是在寻找5(n)个$long事件和一些垃圾,但这不会让我^$long(在一行的开头)。尽管最后一行是$long,但$long后面的逗号也是存在的。好吧,我认为没有必要在当前的解释中使用正则表达式。但是由于您在这里提供了更多信息,可能最好更新您的问题,使其更清楚。顺便说一句,gawk-我目前没有可用的awk-说:
gawk:cmd.line:1:警告:escape seuence“\$”被视为普通的“$”
@Krischu注意:我也在使用两个\-->{FS=“\$long”}@Krischu,为了去掉行首可能出现的
$long
,只需说FS=“,\$long”。也就是说,在前面加一个逗号。这可能是个主意。我想到了类似于
grep”(.\$long){5}文件
粗略地说。这是在寻找5(n)个$long的事件和一些垃圾,但这不会让我^$long(在一行的开头)。尽管最后一行是$long,但$long后面的逗号也是存在的。好吧,我认为没有必要在当前的解释中使用正则表达式。但是由于您在这里提供了更多信息,可能最好更新您的问题,使其更清楚。顺便说一句,gawk-我目前没有可用的awk-说:
gawk:cmd.line:1:警告:escape seuence“\$”被视为普通的“$”
@Krischu注意:我也在使用两个\-->{FS=“\\$long”}@Krischu,为了去掉行首可能出现的
$long
,只需说FS=“,\$long”。也就是说,在前面加一个逗号。
$long
到底是这个值还是一个变量意味着另一件事?@Krischu我挠头想知道是什么让你认为这是一个设计模式问题?@Chetan Kinger:你认为我是如何看待“设计”的模式?正则表达式模式匹配是一个问题。@fedorqui:$long这是我想要形成正则表达式的模式。它代表了它本身,只是一个模式。没有被任何东西替代的特殊意义。@Krischu您将该问题标记为
设计模式
问题。Diptendu编辑该问题以删除错误的usag标记的e。请单击设计模式标记并阅读说明。一般来说,当您第一次使用标记时,请始终阅读标记wiki。
$long
到底是这个值还是一个变量意味着另一件事?@Krishu我挠头,想知道是什么让您认为这是一个设计模式问题?@Chetan Kinger:你认为我是如何看待“设计”的模式?正则表达式模式匹配是一个问题。@fedorqui:$long这是我想要形成正则表达式的模式。它代表了它本身,只是一个模式。没有被任何东西替代的特殊意义。@Krischu您将该问题标记为
设计模式
问题。Diptendu编辑该问题以删除错误的usag请单击design patterns标记并阅读说明。一般来说,当您第一次使用标记时,请始终阅读标记wiki。这正是我想要的。我的问题包含“grep”和“regex”。感谢所有的awk内容,但我的目标是grep和模式匹配。awk解决方案对我不起作用-太尴尬了:)在gawk中不起作用。我喜欢这个解决方案,因为它提醒我在grep中使用-E开关(!)另一方面:虽然我很喜欢这个解决方案,但它在这里对我不起作用。哦,对不起,忘记了反斜杠(或者您同时编辑了吗)?这个解决方案应该得到一个增强:当字符串包含5次$long时,grep(搜索4次出现也与包含5次出现的行相匹配。此命令查找给定行中最少出现的搜索字符串,即
$long
。因此它确保至少出现4次
$long
。这正是我要查找的。我的问题包含“grep”和“regex”。感谢所有的awk内容,但我的目标是grep和模式匹配。awk解决方案对我不起作用-太尴尬了:)在gawk中不起作用。我喜欢这个解决方案,因为它提醒我在grep中使用-E开关(!)另一方面:虽然我很喜欢这个解决方案,但它在这里对我不起作用。哦,对不起,忘记了反斜杠(或者您同时编辑了吗)?这个解决方案应该得到一个增强:当字符串包含5次$long时,grep(搜索4次出现也与包含5次出现的行相匹配。此命令查找给定行中出现的最少搜索字符串,即
$long
。因此,它确保至少出现4次