如何使用Bash从.txt中删除变量字符串

时间:2017-02-08 03:14:36

标签: bash

编辑:

这里的目标是测试fileB中的行是否仍然存在于fileA中,如果不存在则从fileB中删除

1)fileA保存被覆盖的数据

2)fileB保存来自fileA的数据以使用和操作

进行计算

3)一旦fileA发生变化,fileB中的特定行因为更改而不再在fileA中,那么fileB必须删除这些行

我想逐行读取文件并检查该行是否仍然存在于不同的文件中

fileA.txt具有类似的数据输入,但是每2秒写一次:

456  6554  56734657387365873456783456
457  4545  36747365467345735736345665
454  4357  98345783465785345567865535
456  6646  70899089089056879678575775

fileA.txt的内容附加到fileB.txt

fileA.txt>> fileB.txt

我的fileB.txt看起来像这样:

456  6554  56734657387365873456783456
457  4545  36747365467345735736345665
454  4357  98345783465785345567865535
456  6646  70899089089056879678575775

我的主要目标是阅读fileB.txt并检查fileA.txt中是否仍存在每一行,如果不存在则从fileB.txt中删除该行

以下是我的开始:

while read line
  do
    if grep -q "$line" fileA.txt; then
      echo "This part is point less im still learning" 

    else
      sed '/$line/d' ./fileB.txt

    fi

  EDIT:

这里的目标是测试fileB中的行仍然存在于fileA中,如果不是从fileB中删除它们

1)fileA保存被覆盖的数据

2)fileB保存来自fileA的数据以使用和操作

进行计算

3)一旦fileA发生变化,fileB中由于更改而不再在fileA中的行也必须从fileB中删除 完成> fileB.txt

2 个答案:

答案 0 :(得分:5)

您可以使用grep -F - 它更直接,更有效:

grep -xF -f fileA.txt fileB.txt > fileB.txt.trimmed

答案 1 :(得分:0)

如果你想要一个小命令,你可能需要创建一个中间文件。还要检查您是否有comm。将标志-1 -2与它一起传递以获得公共线。

comm fileA.txt fileB.txt -12 > fileB.txt.trimmed