linux - 从文件 bash Linux 中读取
问题描述
我很难使用以下 bash 脚本:
基本上,脚本所做的是接收一个目录,然后它在目录中的所有文件夹中搜索以 .log 结尾的文件。之后,它应该将这些文件中按写入日期排序的所有行打印到标准输出。
我的脚本是这样的:
#!/bin/bash
find . -name ".*log" | cat *.log | sort --stable --reverse --key=2,3
当我运行脚本时,它会返回列表,但排序无法正常工作。我的猜测是因为在某些文件中有 \n 这使它开始一个新行。
有没有办法忽略文件中的 \n 而仍然让每一行返回一个新行?
xxd 命令输出:
ise@ise-virtual-machine:~$ xxd /home/ise/Downloads/f1.log 00000000: 3230 3139 2d30 382d 3232 5431 333a 3333 2019-08-22T13:33 00000010: 3a34 342e 3132 3334 3536 3738 3920 4865 :44.123456789 He 00000020: 6c6c 6f0a 576f 726c 640a 0032 3032 302d llo.World..2020- 00000030: 3031 2d30 3154 3131 3a32 323a 3333 2e31 01-01T11:22:33.1 00000040: 3233 3435 3637 3839 206c 6174 650a 23456789 late. ISE@ISE-VIRTUAL-MACHINE:〜$ xxd/home/ise/downloads/f2.log 00000000:3230 3139 2D30 392D 392D 3434 5431 333A 343A 3434 2019-09-09-44T13:44 Si 00000020: 6d70 6c65 206c 696e 650a 多线。ise@ise-virtual-machine:~$ xxd /home/ise/Downloads/f3.log 00000000: 3230 3139 2d30 382d 3232 5431 333a 3333 2019-08-22T13:33 00000010: 3a34 342e 3132 3334 3536 3738 3920 4865 :44.123456789他00000020:
解决方案
鉴于日志文件中的条目以 \0 (NUL) 结尾,因此可以组合 find、sed 和 sort:
find . -name '*.log' | xargs sed -z 's/\n//g' | sort -z --key=2,3 --reverse
推荐阅读
- if-statement - 我在 netlogo 中遇到了一个带有 ifelse 语句的奇怪问题
- python - 为多对多或外键创建模型
- c - 尝试通过指针数组从二维数组打印字符串时出现分段错误
- codeigniter-3 - 无法在 codeigniter PHP 框架中的托管程序 l 中呈现页面在 wampserver 中工作正常
- javascript - 使用 jQuery src 链接添加到页脚时,jQuery 不起作用
- excel - 获取列 x 在其他电子表格中的 excel 列
- sql - SQl Managment Studio 18 - 隐藏在查询中的闪烁文本光标
- javascript - 如何从 React Form -> Flask Backend -> React Component 传递数据(它是否与 CORS 有关)?
- python - Django没有加载css和JS
- python - pygame中的全屏模式是全黑的