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快得多。