두 날짜 형식을 모두 허용하는 로그 파일에서 DATE 필드만 추출하는 sed에 대한 정규식을 어떻게 작성합니까?
Jun 9 16:56:14 mailserver postfix ...
2017-06-04T06:59:36.984086+02:00 mailserver postfix ...
awk를 사용하여 $1 열을 인쇄하는 것은 두 번째 경우에는 작동하지만 첫 번째 경우에는 작동하지 않습니다.
답변1
이 시도:
$ cat test.txt
Jun 9 16:56:14 mailserver postfix ...
2017-06-04T06:59:36.984086+02:00 mailserver postfix ...
$ sed 's/^\([0-9:+\.T\-]*\|[A-Z][a-z]*\s*[0-9]*\s[0-9:]*\)\s.*/\1/' < test.txt
Jun 9 16:56:14
2017-06-04T06:59:36.984086+02:00
설명하다:
- 줄의 시작 부분을 일치시킵니다.
^
- 백슬래시 괄호를 사용하여 관심 영역을 대체 항목의 역참조로 포함합니다(아래 참조). 즉, "나머지 로그 텍스트" 앞의 "날짜"
- 괄호 안: 두 변형과 일치합니다(
\|
두 하위 표현의 대체를 나타내는 데 사용됨). - 괄호 뒤: 나머지 줄을 버리고 싶기 때문에 줄의 나머지 부분과 일치합니다(처음에는 약간 직관에 어긋나는 것처럼 보이지만 다음 요점을 참조하십시오).
- 바꾸다전선(그래서 우리는 나머지를 일치시킵니다.) 날짜 일치에 대한 역참조:
\1