如何使用grep输出字符串并排除匹配到的内容?
解决方法
grep本身没有直接实现“仅输出非匹配内容”的反向-o功能,但用sed或者awk能更直接地完成你的需求:
方法一:使用sed替换
sed适合做文本替换操作,直接把你要去掉的前缀部分替换为空即可:
sed 's/^>[A-Z0-9\.]* //' File.txt > output.txt
^>:匹配行首的>符号[A-Z0-9\.]*:匹配后续的大写字母、数字、点号组合(\.是转义后的点号,确保匹配字面的.)- 最后的空格:匹配前缀和目标文本之间的空格
- 整个命令会把每行开头的前缀部分替换为空,结果写入
output.txt
方法二:使用awk处理
awk也能通过正则替换实现同样效果:
awk '{sub(/^>[A-Z0-9\.]* /, ""); print}' File.txt > output.txt
sub()函数会在当前行中替换第一个匹配到的正则内容为空- 最后
print输出处理后的整行
如果你的grep支持PCRE(就是你用的-P参数),也可以结合perl来实现,但sed和awk是更通用的选择,不需要额外依赖。
内容的提问来源于stack exchange,提问作者Polikarpos Goldshtein
相关产品推荐
相关产品推荐

