我有几千行的.csv文件。其中一些行包含ABC,一些包含XYZ,一些包含其他内容(我不确定)。有没有办法找到不包含ABC或XYZ的行并通过unix识别它们?
基本上,我希望能够-grep所有没有两个ABC或XYZ的行,看看这些行是什么。
提前致谢!
答案 0 :(得分: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
选项;
grep -v -e ABC -e XYZ file
答案 1 :(得分:2)
当需要具体说明字符串时,使用正则表达式字(\b
)边界是有帮助的:
\bABC\b|\bXYZ\b
例如,如果您的文件包含:
ABCXYZ
XYZ ABC
ABZ
使用以下内容将导致输出第1行和第3行:
grep -E -v '\bABC\b|\bXYZ\b' file
不使用字边界,您也不会输出ABCXYZ
,而不是ABC
或XYZ
。
答案 2 :(得分:0)
使用sed
sed '/ABC\|XYZ/d' ip.csv
/ABC\|XYZ/
匹配包含ABC
或XYZ
d
命令删除这些行如果您需要以不区分大小写的方式搜索这些字词,请使用I
标记
sed '/ABC\|XYZ/Id' ip.csv