首页 > 解决方案 > 排除文本文件中包含的文本字符串

问题描述

我有一个包含以下行的文本文件,

$ cat HELLO.DAT
A
FOX
IS
JUMPING

我有另一个包含

$ cat WORLD.DAT
A CAT
RUNNING FOX
IS GOD
AND JUMPING JACK

我想要以下输出

CAT
RUNNING
GOD
AND JACK

我试过了

while read -r line; do grep -v "$line" WORLD.DAT; done < HELLO.DAT

但输出是,

RUNNING FOX
IS GOD
A CAT
IS GOD
AND JUMPING JACK
A CAT
RUNNING FOX
AND JUMPING JACK
A CAT
RUNNING FOX
IS GOD

因此,一旦找到匹配项,它就会删除整行,并且还会为 HELLO.DAT 中的每个列表循环遍历 WORLD.DAT

我也试过

grep -v -f HELLO.dat WORLD.dat but then no output.

我该如何解决?

标签: bash

解决方案


使用“sed”命令解决您的问题:

while read -r line
do 
  sed -i 's/\b'$line'\s*\b//g' WORLD.Dat
done < Hello.dat
sed -i 's/\s*$//g' WORLD.Dat

'sed' 将用空字符串替换 WORLD.DAT 中的单词(与 HELLO.DAT 中的单词匹配)。

第三行的 'sed' 可以处理具有尾随和前导空格且仅具有前导空格的单词。

最后一行的 'sed' 删除行尾的尾随空格。


推荐阅读