bash - 排除文本文件中包含的文本字符串
问题描述
我有一个包含以下行的文本文件,
$ 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.
我该如何解决?
解决方案
使用“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' 删除行尾的尾随空格。
推荐阅读
- tensorflow - 有没有办法在 Tensorflow 中“反转”神经网络?
- r - 在 foreach 循环中无法识别函数
- window - IBM DataStage Designer 窗口已隐藏
- python - 如果在我将每一行输入终端时它有效,为什么这个 shell 脚本会失败?
- android - firefox mobile/firefox focus 是否应该始终自动播放视频?
- javascript - 不是所有的对象都继承自 Object 实例?
- javascript - mapkit JS:如何绘制具有多个坐标的折线
- javascript - jquery问题输入读取值问题
- javascript - 尝试编辑动态创建的输入字段被删除
- linux - 空闲内存被占用