我对“grep”和整理符号有些麻烦

时间:2011-11-25 09:10:02

标签: shell grep

这是我的问题。一个名为data.f的现有文件,我使用整理符号“48”,我想在我的文件中将“48”与括号表达式中的整理符号匹配。

grep '[[.48.]]' data.f

但是有一些错误提示:

grep: Invalid collation character

但是,括号表达式中的字符类没有问题。

grep "[[:alpha:]]" data.f

3 个答案:

答案 0 :(得分:1)

如果你想要grep 48

grep 48 file

如果你想grep“48”

grep '"48"' file

//为了避免在评论中进行讨论,我将使用更多示例扩展我的帖子

如果你想在一行中出现“48”,你应该使用正则表达式

cat file | grep '\(.*"48"\)\{n\}' | grep -v '\(.*"48"\)\{n+1\}'

基本上你用至少n次出现的grep行,然后用反转匹配你排除出现n + 1次字符串的行,所以你得到n次出现

在你评论中提到你想要用5次出现的“48”grep行,可以用其他字符分隔(这就是我放的原因。*在“48”之前) 所以这是样本

cat file | grep '\(.*"48"\)\{5\}' | grep -v '\(.*"48"\)\{6\}'

答案 1 :(得分:0)

不会grep '48' data.f工作吗?

答案 2 :(得分:0)

我不知道你的意思是“我使用整理符号”48“”(我知道校对类是什么,这是grep期望在你的输入中看到的,但我不知道什么是校对符号会be),但是从你的一条评论中,你似乎确实在文件中寻找确切的字符串[[.48.]]。这有两种方法:

grep -F '[[.48.]]' data.f

grep '\[\[.48.]]' data.f

在您的其他一条评论中,您询问了如何向grep询问至少有五次出现“48”的行。这是一个非常明确的正则表达式问题:

grep -E '(.*48){5}' data.f