Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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 如何在bash中搜索grep开头有“:”的字符串?_Linux_Bash_Unix_Sh - Fatal编程技术网

Linux 如何在bash中搜索grep开头有“:”的字符串?

Linux 如何在bash中搜索grep开头有“:”的字符串?,linux,bash,unix,sh,Linux,Bash,Unix,Sh,我通过以下方式获得文件中特定字符串的出现次数: grep -o "\bstring \b" $file | wc -l 但是当我有一个像:2\n这样的字符串时,这个字符串在开始时有:并且在本例中grep不起作用,它每次给我一个0计数,即使我的文件有多个:2\n 我该怎么做? 谢谢 我的档案是这样的 :2_n nE Ea an no o:2 :2_n _na 如果我使用grep查看:2\n的出现次数 grep -o "\b:2_n \b" $file | wc -l grep给了我0,对于

我通过以下方式获得文件中特定字符串的出现次数:

grep -o "\bstring \b" $file | wc -l
但是当我有一个像:2\n这样的字符串时,这个字符串在开始时有:并且在本例中grep不起作用,它每次给我一个0计数,即使我的文件有多个:2\n 我该怎么做? 谢谢

我的档案是这样的

:2_n nE Ea an no o:2 :2_n _na 
如果我使用grep查看:2\n的出现次数

grep -o "\b:2_n \b" $file | wc -l

grep给了我0,对于其他字符串它工作得很好,问题是字符串有:在开始时,正如Barmar解释的那样,表达式\b在 一个单词字符字母数字加uu和一个非单词字符 除单词以外的其他字符

作为字符串:2_n以非单词字符开头,以单词结尾 字符,不适合使用\b从中提取字符串 句子 让我们看看例子

^:2_n    ("^" indicates the start of line)
 | Both "^" and ":" are non-word characters hence "\b" doesn't match.

:2_n :2_n
     | Both " " and ":" are non-word characters hence "\b" doesn't match.
假设您的字符串定义为非空白字符序列, 由空白字符分隔,可以改为:

grep -Po "(^|(?<=\s)):2_n((?=\s|$))" file | wc -l
grep的-P选项启用与perl兼容的正则表达式。
模式^ |?由于您没有显示示例,因此我无法在grep中测试它,如果您对awk没有问题,请尝试以下一次awk'{sum+=gsub/:2_n/,&}END{print sum}Input_file?尝试grep-F\bstring\b$file | wc-l:2_n与:2_n空格不匹配。\b匹配单词边界,这意味着左边的字符是单词,右边的字符是非单词,反之亦然行首和行首都是非单词,因此:不在单词边界处。明显的修复方法是不在:。为什么不能删除initiial\b?P选项起作用,但速度非常慢,请改用ripgrep。它比grep快得多。