Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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
Linux 显示正则表达式大于';n';次数_Linux_Unix_Awk_Grep - Fatal编程技术网

Linux 显示正则表达式大于';n';次数

Linux 显示正则表达式大于';n';次数,linux,unix,awk,grep,Linux,Unix,Awk,Grep,我有文件-abc.txt,格式如下- a:,b:,c:,d:,e:,f:,g: a:0;b:,c:3,d:,e:,f:,g:1 a:9,b:8,c:6,d:5,e:2,f:,g: a:0;b:,c:2,d:1,e:,f:,g: 现在在unix中,我只想获取正则表达式:[0-9](冒号后跟任意数字)存在超过2次的行。 或者换句话说,显示至少有3个属性具有数值的行 输出应仅为第2行和第3行 a:0;b:,c:3,d:,e:,f:,g:1 a:9,b:8,c:6,d:5,e:2,f:,g: per

我有文件-abc.txt,格式如下-

a:,b:,c:,d:,e:,f:,g:
a:0;b:,c:3,d:,e:,f:,g:1
a:9,b:8,c:6,d:5,e:2,f:,g:
a:0;b:,c:2,d:1,e:,f:,g:
现在在unix中,我只想获取正则表达式
:[0-9]
(冒号后跟任意数字)存在超过2次的行。 或者换句话说,显示至少有3个属性具有数值的行

输出应仅为第2行和第3行

a:0;b:,c:3,d:,e:,f:,g:1
a:9,b:8,c:6,d:5,e:2,f:,g:
perl-ne'print if/(.*?\:\d.*?{2,}/'您的文件

这将两次或多次匹配具有character:number的行


使用基本
grep

grep '\(:[[:digit:]].*\)\{3,\}' file
:[[:digit:][].
匹配冒号后跟数字和零个或多个任意字符。此表达式被放入子模式:
\(…\)
。表达式
\{3,\}
表示前面的表达式必须出现3次或更多次

使用扩展posix正则表达式,可以编写得更简单一些,而无需转义
{

grep -E '(:[[:digit:]].*){3,}' file

为什么
a:0;b:,c:2,d:1,e:,f:,g
不是有效行?在使用grep或awk时,需要使用posix正则表达式。GNU grep可以在使用
-P
时使用perl正则表达式,但这不是posixA regexp,它与某个在线工具中的字符串相匹配,只是-regexp与某个在线工具中的字符串相匹配。它是not已经足够了,在尝试为某些命令行工具开发功能(可能包括使用regexp)时很少有任何用处
perl -nE '/:[0-9](?{$count++})(?!)/; print if $count > 2; $count=0' input
$ awk -F':[0-9]' 'NF>3' file
a:0;b:,c:3,d:,e:,f:,g:1
a:9,b:8,c:6,d:5,e:2,f:,g:
a:0;b:,c:2,d:1,e:,f:,g: