![根据标签删除文本文件中的完整行](https://linux22.com/image/49459/%E6%A0%B9%E6%8D%AE%E6%A0%87%E7%AD%BE%E5%88%A0%E9%99%A4%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%AE%8C%E6%95%B4%E8%A1%8C.png)
例如:01.txt、02.txt、03.txt 和 04.txt 具有以下值。
HDR|A|B|C|D|F|||||||
DTL|1|2|3|4|5|||||||||||
DTL|5|6|7|8|9|||||||||||
TLR|A|B|C|D|F|||||||
我必须根据 HDR、TLR 等标签删除完整的线条。
从四个文件中删除 HDR 和 TLR 行后,它应该合并为单个文件。
我们应该以这种方式合并,在删除 HDR、TLR 行后应保持文件顺序。(01_latest.txt、02_latest_txt、03_latest.txt 和 04_latest.txt)
在UNIX下怎样才能实现脚本呢?
答案1
您也可以使用以下命令删除这些行grep
:
$ grep -vE "HDR|TLR" *.txt > merged.txt
这将跳过任何包含“HDR”或“TLR”的行。这|
是一个 or 运算符,因此您也可以根据需要扩展它,例如“STR1|STR2|STR3”。只要名称一致,就可以保证循环遍历文件01.txt
。02.txt
您可以通过以下示例来说服自己这一点。
$ ls -1
01.txt
02.txt
03.txt
04.txt
05.txt
06.txt
07.txt
08.txt
09.txt
11.txt
12.txt
13.txt
14.txt
15.txt
16.txt
17.txt
18.txt
19.txt
$ echo *.txt
01.txt 02.txt 03.txt 04.txt 05.txt 06.txt 07.txt 08.txt 09.txt 11.txt 12.txt 13.txt 14.txt 15.txt 16.txt 17.txt 18.txt 19.txt
在这里您可以看到 shell*.txt
按照您要查找的顺序展开。
答案2
您可以删除这些行并使用合并所有内容
sed '/^\(HDR\|TLR\)|/d' [0-9]*.txt > merged.txt
这里假设应删除的行的第一个条目恰好是HDR
or TLR
。