我想知道是否可以使用 sed 命令找到 2 个模式(在本例中为日期)之间的范围并将范围内的这些行输出到新文件。
现在,我只查看一个文件并获取文件 FileMoverTransfer.log 的时间范围内的行。但是,经过一段时间后,这些日志会移动到后缀为 FileMoverTransfer.log-20180404-xxxxxx.gz 的新日志文件中。这是我当前的代码:
sed -n '/^'$start_date'/,/^'$end_date'/p;/^'$end_date'/q' FileMoverTransfer.log >>/public/FileMoverRoot/logs/intervalFMT。日志
虽然这不起作用,因为 sed 无法查看目录中以 FileMoverTransfer.log 开头的所有文件?
sed -n '/^'$start_date'/,/^'$end_date'/p;/^'$end_date'/q' FileMoverTransfer.log* >> /public/FileMoverRoot/logs/intervalFMT.log
如有任何帮助,我们将不胜感激。谢谢!
最佳答案
范围运算符仅在单个文件中运行,因此如果开头在一个文件中而结尾在另一个文件中,则不能使用它。
您可以使用 cat
连接所有文件,并将其通过管道传递给 sed
:
cat FileMoverTransfer.log* | sed -n "/^$start_date/,/^$end_date/p;/^$end_date/q" >> /public/FileMoverRoot/logs/intervalFMT.log
您可以使用双引号,而不是引用和取消引用 sed
命令,以便在其中扩展变量。如果变量包含空格,这也可以防止出现问题。
关于linux - 使用sed通过目录中的多个文件获取模式范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49659001/