求shell脚本,删除一个a.txt文档中 完全包含 另外一个b.txt文档的行。
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/18 02:42:46
求shell脚本,删除一个a.txt文档中 完全包含 另外一个b.txt文档的行。
根据第二个文档,删除第一文档中 完全包含 另外第二个文档的行。
第一个文档的格式是“哈尔滨+tab符号+数字”。
希望的结果是:
求大神解答。
![求shell脚本,删除一个a.txt文档中 完全包含 另外一个b.txt文档的行。](/uploads/image/z/15865231-31-1.jpg?t=%E6%B1%82shell%E8%84%9A%E6%9C%AC%EF%BC%8C%E5%88%A0%E9%99%A4%E4%B8%80%E4%B8%AAa.txt%E6%96%87%E6%A1%A3%E4%B8%AD+%E5%AE%8C%E5%85%A8%E5%8C%85%E5%90%AB+%E5%8F%A6%E5%A4%96%E4%B8%80%E4%B8%AAb.txt%E6%96%87%E6%A1%A3%E7%9A%84%E8%A1%8C%E3%80%82)
cat b.txt| xargs -I {} sed -i '/\<{}\>/d' a.txt直接修改a.txt的话,那么可以按以上命令.命令解释一下:显示b.txt,并重定向给xargs,xargs将每行锁定,然后每行执行删除匹配该字的行.{}锁定的一行(一行一字), \<匹配字的开始, \>匹配字的结尾, d删除匹配行, i直接修改文件缺点是直接将a.txt修改了.如果不需要修改的话,那么就可以参考楼下的命令grep -v -w "\<`cat b.txt`\>" a.txt命令解释一下:在a.txt中搜索不匹配cat 命令逐行(一字一行)显示的行.-v 表示不匹配的, -w 按字匹配, \<匹配字的开始, \>匹配字的结尾