更新tar。 bz2压缩文件

时间:2019-01-26 05:52:49

标签: bash shell

trx_date.tar.bz2压缩文件中有100百个文件,其中包含request和response。以下是trx_date.tar.bz2的文件结构:trx_date.tar:trx_date包含:log1,log2,log3文件,这些文件具有xml请求,具有一些敏感信息,我想将其屏蔽为某些默认值。请求请求的标签为1234567,我想对其进行屏蔽以将其更新为将日志文件更新为3333333

我可以使用:

// If you want to retrieve with the userId.
set user:1 user:1:Aaa:s1
set user:2 user:2:Bbb:s2

我们如何使用shell脚本覆盖日志文件中的那些值?

日志文件包含请求和响应。我们这里有123456这样的标签,也有其他标签。我想读取日志文件的所有行,并替换该特定标签,例如333333下面,然后将信息保存到同一文件中。我们也有带有333333的信息标签,但我不想考虑这一点。

1 个答案:

答案 0 :(得分:2)

原则上,您无法直接执行所需的操作(不从.tar.bz2压缩档案中提取文件),因为.tar.bz2文件是tar archive的bzip2压缩。 。因此,唯一好的解决方案是从存档中提取文件,对提取的文件进行修改(例如,使用sed(1)awk),然后从中重新创建存档。在一个特定的文本文件上使用sed可以用<number>[0-9]*</number>替换一个<number>0000000</number>之类的模式。编写bash for loop可以在多个文件上进行迭代很容易。因此,请结合使用这两种方法,或者编写一个小的Shell或Python脚本(在提取的文件上)。

在实践中(但这是有风险的,我不建议这样做),您希望<number></number>仅出现在您想要的tar档案的文件部分中进行修改,然后您可以使用以下方法替换(直接在未压缩 tar存档中) sed(1),这样的序列与相同长度的其他序列 (有关tar格式的更多信息:元数据(例如文件大小)以文本形式出现, NUL 个字节)。

您还可以考虑使用tardy,它是tar后处理器(您需要安装)。

我强烈建议提取tar存档,对提取的文件进行操作,然后再次重新创建该存档。当然,您需要足够的磁盘空间,并且必须对其进行估算。但是请告诉您的经理,磁盘空间便宜,通常比您的人工成本便宜。

PS。您的问题中给出的命令确实是错误的,并且没有实现您的梦想。进一步了解redirectionpipelinesglobbingunix shells。仔细阅读documentation of Bash(尤其是basic shell featuresshell expansioncommand substitution)。 阅读,也您要使用的每个命令的文档,例如tar(1)grep(1)sed(1)等)。也许可以使用man-pages(7)命令来阅读相关的man(1)