例如,我有一个包含数据的文件:
[2023-03-21 12:27:19 +0000] some_data
[2023-03-21 12:27:19 +0000] some_data
[2023-03-22 12:27:19 +0000] some_data
[2023-03-23 12:27:19 +0000] some_data
[2023-03-23 12:27:19 +0000] some_data
[2023-03-25 12:27:19 +0000] some_data
[2023-03-26 12:27:19 +0000] some_data
[2023-03-29 12:27:19 +0000] some_data
[2023-03-29 12:27:19 +0000] some_data
[2023-03-29 12:27:19 +0000] some_data
[2023-03-29 12:27:19 +0000] some_data
我想 grep 所有包含以下值的行2023-03-22到2023-03-26
所以,我想 grep 它的行
[2023-03-22 12:27:19 +0000] some_data
[2023-03-23 12:27:19 +0000] some_data
[2023-03-23 12:27:19 +0000] some_data
[2023-03-25 12:27:19 +0000] some_data
[2023-03-26 12:27:19 +0000] some_data
我怎样才能用 grep 或者 sed 或 awk 来做到这一点?
还有另一个案例:
我有一个包含数据的文件
[2023-03-21 00:45:20 +0000] some_data
[2023-03-21 01:10:11 +0000] some_data
[2023-03-21 02:04:56 +0000] some_data
[2023-03-21 12:09:15 +0000] some_data
...
...
in this part the lines with the next data with some_data
...
...
[2023-03-23 21:40:19 +0000] some_data
[2023-03-23 22:15:11 +0000] some_data
[2023-03-23 23:40:06 +0000] some_data
我如何从中 grep 行[2023-03-21 01:10:11 +0000]一些_数据到[2023-03-23 22:15:11 +0000] 一些_数据
也许我可以用标志 -n grep 吗?我得到 [2023-03-21 01:10:11 +0000] 的字符串数量,然后使用标志 -n 来 grep 值 [2023-03-23 22:15:11 +0000]。它的命令返回我这些行的行数。
如果我知道行数,如何获得从特定行到特定行的大量日期?
答案1
执行此操作的一个简单方法是将您想要在该位置出现的字符指定为“括号表达式”的成员:
grep '2023-03-2[23456]' file_name
当您在排序/校对方案中查找一组连续的字符时(就像您的日期一样),您可以在括号表达式中使用范围:
grep '2023-03-2[2-6]' file_name
可以使用更复杂的方法来匹配行的内容,但是您的问题是通过一个很好的、简单的括号表达式来处理的。
答案2
我找到了一个答案:如果我想从文件中打印大量数据 - 从值到值,那么在这种情况下我可以使用命令 sed :
sed -n '/\[2023-03-21 01:10:11/,/\[2023-03-23 22:15:11/p' file_name
我忘记了 sed 它是字符串数据的流编辑器。
答案3
$ awk -F'[[ ]' '("2023-03-22" <= $2) && ($2 <= "2023-03-26")' file
[2023-03-22 12:27:19 +0000] some_data
[2023-03-23 12:27:19 +0000] some_data
[2023-03-23 12:27:19 +0000] some_data
[2023-03-25 12:27:19 +0000] some_data
[2023-03-26 12:27:19 +0000] some_data
考虑一下根据任何要求修改它是多么微不足道,例如:
$ awk -F'[][ ]' '("2023-03-26" <= $2)' file
[2023-03-26 12:27:19 +0000] some_data
[2023-03-29 12:27:19 +0000] some_data
[2023-03-29 12:27:19 +0000] some_data
[2023-03-29 12:27:19 +0000] some_data
[2023-03-29 12:27:19 +0000] some_data
$ awk -F'[][ ]' '("2023-03-26" == $2)' file
[2023-03-26 12:27:19 +0000] some_data
$ awk -F'[][ ]' '("2023-03-22" == $2) || ("2023-03-26" == $2)' file
[2023-03-22 12:27:19 +0000] some_data
[2023-03-26 12:27:19 +0000] some_data