특정 값에서 특정 값으로 grep

특정 값에서 특정 값으로 grep

예를 들어, 데이터가 포함된 파일이 있습니다.

[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

그래서 나는 그것을 라인에 맞게 잡고 싶습니다.

[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]some_data를[2023-03-23 ​​​22:15:11 +0000] Some_data

어쩌면 grep에 -n 플래그를 사용할 수 있을까요? 문자열 수 [2023-03-21 01:10:11 +0000]를 얻은 다음 -n 플래그를 사용하여 [2023-03-23 ​​22:15:11 +0000] 값을 grep합니다. 그 명령은 나에게 이 줄의 행 번호를 반환합니다.

행 수를 알고 있는 경우 특정 행에서 특정 행까지 많은 수의 날짜를 어떻게 얻을 수 있습니까?

답변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

관련 정보