【发布时间】:2016-12-13 16:01:09
【问题描述】:
我正在尝试清理下一个文件:
1. 10.160.120.10 ; 140.0.0.40 ;Data-- 1155~00120~xtl~12/01/2016 03:00:24~000BBBBBA4FB~ÍežG5„È&gÈe@Ÿ#•Œ‘„¦åEI²6frÞõ+ã:®*ÓÓÂ"ða5»V$è~
2. ¼?Amµxðïej£„7‹ìËÏð‡.4 --
3. 10.160.120.11 ; 140.10.10.10 ;Data-- 1155~00120~xtl~12/01/2016 03:00:54~2B3BB1EB1BBB~£ˆD]†CÀ,£ÑÉ»In&Ry+/jÑ%A¡ã ÷d_#C÷—NÏÕÞ
3. Ü‚úè"åD\’c\ûñ7x°yFæï --
请注意,数字不是文件的实际部分。它们只是行数的参考。行的大小取决于编码的消息(这就是为什么重复 3 的原因,因为它基本上是一行)。有数千条记录,但它们遵循相同的模式。每条记录都以 (--) 结尾。
基本上,我想要实现的只是将 IP 并排放置。
例如:
10.160.120.10 000BBBBBA4FB
我的第一步是删除第一个 (;) 和第四个 (~) 之间的所有内容,因为每个记录的模式都是相同的。
这让我想到了这一点。
sed 's/;.*~//'
但是,这个特定的命令会删除直到最后一个 (~) 而不是第四个的所有内容。
如果它成功删除了第一个 (;) 和第四个 (~) 之间的所有内容,我会得到这样的结果:
0.165.65.113 0008B9A4F3~ÍežG5„È&gÈe@Ÿ#•Œ'„¦åEI²6frÞõ+ã:®*ÓÓÂ"ða5»V$è~ ¼?Amµxðïej£„7‹ìËÏð‡.4 --
然后我想我可以删除第一个 (~) 之后的所有内容,以便获得所需的输出。
我是否遵循正确的程序?我应该使用 swd 还是 awk 来实现这一点?任何建议表示赞赏!
【问题讨论】:
-
如果要删除到下一个波浪号,请使用
[^~]*~而不是.*~。到第二个波浪号,[^~]*~[^~]*~等。 -
是的,这很有帮助。谢谢!