타임스탬프로 시작하는 줄 뒤에 빈 줄을 추가하는 방법

타임스탬프로 시작하는 줄 뒤에 빈 줄을 추가하는 방법

나의 현재 회사 로그 보기 경험은 끔찍합니다. 특정 기간 내에 정리된 로그에 새 행을 추가하고 싶습니다. 매 날짜마다 새로운 라인을 얻고 싶습니다.

날짜와 시간 형식은 다음과 같습니다.

2023-10-03 15:34:37

가능하다는 것은 알지만 tr어떻게 해야 할지 모르겠습니다. 최선의 답변을 선택하겠습니다. 누구든지 새 파일에 새 콘텐츠를 작성하는 방법을 알려줄 수 있습니까? 성능상의 이유 때문입니다. 나는 vi를 사용하는 것을 좋아하지 않으며 로그 리더로는 덜 사용합니다.

답변1

에서는 vim다음을 수행할 수 있습니다.

:%s/\v^\d{4}(-\d{2}){2} \d{2}(:\d{2}){2}.*/&\r

참고 \v하세요환상적이다따라서 각 항목 앞에 백슬래시를 추가할 필요가 없습니다 {}().

예, \r대체(선을 두 부분으로 나눕니다.:help s/\r예상되는 캐리지 리턴 문자 대신 )의 문구를 사용하십시오 .

존재하다기준vi( \d, \v, \rnorm모두 vim확장자입니다.) 이에 상응하는 내용은 다음과 같습니다.

:%s/^[[:digit:]]\{4\}\(-[[:digit:]]\{2\}\)\{2\} [[:digit:]]\{2\}\(:[[:digit:]]\{2\}\)\{2\}.*/&^M/

^MCtrl+를 눌러 V입력합니다 Enter(그리고 ^JCR(캐리지 리턴이라고도 함) 대신 LF(라인 피드라고도 함)를 다시 삽입합니다 ^M.)

그러나 viCentOS의 구현은 (적어도 CentOS 4만큼 빨랐습니다) 따라서 확장 기능을 vim사용할 수 있습니다 .vimvi

어쨌든 tr음역, 문자를 다른 문자로 바꾸거나 제거하거나 압착하는 도구이므로 여기서는 사용할 수 없습니다.

sed, awk또는 (AFAIK, Perl에서 파생된 정규식 연산자)를 perl사용할 수 있습니다 .\d

perl -pi -e '$_ .= "\n" if /^\d{4}(-\d{2}){2} \d{2}(:\d{2}){2}/' your-file

파일 in을 편집합니다. 또는:

perl -p -e '$_ .= "\n" if /^\d{4}(-\d{2}){2} \d{2}(:\d{2}){2}/' < your-file > new-file

결과를 새 파일에 넣습니다.

또는 Regex::Common::time모듈을 사용할 수 있다고 가정하면 다음과 같습니다.

perl -MRegexp::Common=time -p -e '
  $_ .= "\n" if m{^$RE{time}{strftime}{-pat=>"%Y-%m-%d %H:%M:%S"}}
  ' < your-file > new-file

2023-13-00 25:61:62이렇게 하면 더 엄격한 일치가 이루어집니다(예: 일치하지 않음). 이러한 날짜와 일치하는 날짜가 있지만 $RE{time}{iso}날짜 또는 시간 구성 요소가 없어 여기에서 사용할 수 없는 일부 날짜를 포함하여 ISO8601 날짜의 다른 변형도 많이 있습니다.

다음을 사용하여 실제 정규식을 볼 수 있습니다.

$ perl -MRegexp::Common=time -le 'print $RE{time}{strftime}{-pat=>"%Y-%m-%d %H:%M:%S"}'
(?:(?:\d{4})-(?:(?:(?=[01])(?:0[1-9]|1[012])))-(?:(?:(?=[0123])(?:0[1-9]|[12]\d|3[01]))) (?:(?:(?=[012])(?:[01]\d|2[0123]))):(?:(?:[0-5]\d)):(?:(?:(?=[0-6])(?:[0-5]\d|6[01]))))

답변2

이 명령은 다음과 같습니다.

누르고 :들어가세요 g/\v\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/normal o

설명하다:

  • g: global의 약어로, 정규식과 일치하는 모든 라인에 대해 명령을 실행합니다.
  • \v: 정규 표현식 만들기"환상적"(실명). 특수 문자를 이스케이프 처리할 필요가 없다는 뜻입니다.
  • /^\d\{4\}-\d\{2\}-\d\{2\} \d\{2\}:\d\{2\}:\d\{2\}/:은 정규식입니다. 다음과 같은 도구에 넣으십시오.https://regexr.com/또는https://regex101.com/, 그들은 그것을 아주 잘 설명했습니다
  • normal o: 공통 명령 실행 매개변수일반 모드. 이 경우 누르면 o새 줄이 열립니다.


공식 문서의 설명을 읽어보세요: :help global, :help \v,:help normal

관련 정보