dd-mm-yyyy
.HH:MM
HH:MM:SS
정규식을 사용하여 텍스트 파일에서 타임스탬프를 추출했지만 해당 타임스탬프 행도 가져오고 싶습니다. 한 파일에는 타임스탬프가 있고 다른 파일에는 해당 줄이 있으면 좋을 것입니다. 각 행에는 여러 타임스탬프가 있을 수 있으므로 동일한 행이 여러 번 나타나야 합니다.
이것이 가능하다면 타임스탬프 주변에 몇 개의 단어나 줄만 추가하고 싶다면 어떻게 해야 합니까? 아이디어는 단지 타임스탬프를 얻고 해당 컨텍스트를 추출하는 것입니다.
현재 저는 이 작업을 위해 Matlab을 사용하고 있지만 MacOS에서 지원하는 모든 Unix 도구는그리고Windows용 휴대용 git bash. Mac은 둘러보는 데 필요한 Perl 정규식 옵션을 grep
지원하지 않습니다 .-P
(?<![0-9])
다음은 원본 파일과 원하는 출력의 예입니다.
원래:
L&L logfile
14-5-12
16-05-2012
Experiment 1
Device 77212-123-123123
Instrument 2, 34g, 66hz
Notes:
Something weird happened 12:34
Everything is fine 13:07
Log
8:00 routine 1
8:20 routine 2
8:40 routine 3, 8:45 something went south
8:50 routine 4, 8:50:12 weird peak at data
출력 1:
14-5-12
16-05-2012
12:34
13:07
8:00
8:20
8:40
8:45
8:50
8:50:12
출력 2:
14-5-12
16-05-2012
Something weird happened 12:34
Everything is fine 13:07
8:00 routine 1
8:20 routine 2
8:40 routine 3, 8:45 something went south
8:40 routine 3, 8:45 something went south
8:50 routine 4, 8:50:12 weird peak at data
8:50 routine 4, 8:50:12 weird peak at data
답변1
grep -Eo '[0-9.]{10},[0-9]{2}:[0-9]{2}(:[0-9]{2})?' text.file
타임스탬프만 생성됩니다. 옵션을 제거하면 -o
전체 행을 받게 됩니다.
grep -E '[0-9.]{10},[0-9]{2}:[0-9]{2}(:[0-9]{2})?' text.file
모드가 [0-9.]{10}
올바른 출력을 생성하지 않으면 더 강력한 출력으로 쉽게 변경할 수 있습니다. ([0-9]{2}\.){2}[0-9]{4}
두 작업을 동시에 수행하려면 다음을 수행하십시오.sed예를 들어
sed -r '/[0-9.]{10},[0-9]{2}:[0-9]{2}(:[0-9]{2})?/w string.file
s/[^:]*([0-9.]{10},[0-9]{2}:[0-9]{2}(:[0-9]{2})?)/\1\n/;//P;D' text.file