2016-07-25 150 views
-1

我有.csv文件与数千行。其中一些行包含ABC,一些包含XYZ,一些包含其他内容(我不确定)。有没有办法找到不包含ABC或XYZ的行,并通过unix识别它们?-in命令在终端复杂命令

本质上,我想能够-grep所有没有两个ABC或XYZ中的任何一行来查看这些行是什么。

在此先感谢!

+0

您的问题包括简洁,可测试的样本输入和预期输出。还包括你到目前为止所尝试的以及你自己解决这个问题(听起来像5分钟阅读grep手册页会产生答案)。 –

回答

3

对此没有任何“复杂”。

grep -E -v 'ABC|XYZ' file | less 

如果你想排除包含只有准确这些值线,添加-x选项,或添加锚点正则表达式; '^(ABC|XYZ)$'

您可能想用更深入的分析替换less。例如,标准| sort | uniq -c | sort -rn'将产生不同值的频率计数。

printf 'A\nB\nABC\nA\nB\nXYZ\nA\n' | 
grep -E -v 'ABC|XYZ' | 
sort | uniq -c | sort -rn 

产生

3 A 
    2 B 

顺便说一句,甚至普通老式传统grep可以做到这一点,至少在一些方言;只提供多个-e选项;

\bABC\b|\bXYZ\b 

例如,如果你有一个文件:

ABCXYZ 
XYZ ABC 
ABZ 

使用

grep -v -e ABC -e XYZ file 
2

使用正则表达式字(\b)边界需要是具体介绍一下字符串时是有帮助以下将导致第1行和第3行输出:

grep -E -v '\bABC\b|\bXYZ\b' file 

不使用字边界,您也不会输出ABCXYZ,这不是ABCXYZ

+1

或使用grep的'-w'开关来匹配单词。'grep -E -vw'ABC | XYZ'file' – Sundeep

0

使用含有ABCXYZ

  • d命令sed

    sed '/ABC\|XYZ/d' ip.csv 
    
    • /ABC\|XYZ/匹配线解删除那些线

    如果需要搜索在不区分大小写的方式那些术语,使用I标志

    sed '/ABC\|XYZ/Id' ip.csv