-in命令在终端复杂命令
问题描述:
我有.csv文件与数千行。其中一些行包含ABC,一些包含XYZ,一些包含其他内容(我不确定)。有没有办法找到不包含ABC或XYZ的行,并通过unix识别它们?-in命令在终端复杂命令
本质上,我想能够-grep所有没有两个ABC或XYZ中的任何一行来查看这些行是什么。
在此先感谢!
答
对此没有任何“复杂”。
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
答
使用正则表达式字(\b
)边界需要是具体介绍一下字符串时是有帮助以下将导致第1行和第3行输出:
grep -E -v '\bABC\b|\bXYZ\b' file
不使用字边界,您也不会输出ABCXYZ
,这不是ABC
或XYZ
。
+1
或使用grep的'-w'开关来匹配单词。'grep -E -vw'ABC | XYZ'file' – Sundeep
答
使用含有ABC
或XYZ
d
命令sed
sed '/ABC\|XYZ/d' ip.csv
-
/ABC\|XYZ/
匹配线解删除那些线
如果需要搜索在不区分大小写的方式那些术语,使用I
标志
sed '/ABC\|XYZ/Id' ip.csv
您的问题包括简洁,可测试的样本输入和预期输出。还包括你到目前为止所尝试的以及你自己解决这个问题(听起来像5分钟阅读grep手册页会产生答案)。 –