실행 후 다음 결과를 얻었다고 가정합니다.grep "emailed"
/home/John/logs/2013-07-10.171222-0400EDT.html:I have emailed Mark. Thanks
내 출력이 다음과 같이 보이도록 날짜를 추출하고 싶습니다.
2013-07-10:I have emailed Mark. Thanks
어떤 종류의 GNU 도구를 사용하여 이 작업을 어떻게 수행할 수 있습니까? 특히, grep의 출력을 이 도구로 파이프하고 싶습니다. 나는 이것이 이것을 하기 위한 도구일지도 모른다고 생각 sed
하지만, 어떻게 될지는 잘 모르겠습니다.
답변1
이것:
$ <grep-command> | sed -r 's|^.*/([0-9]{4}-[0-9]{2}-[0-9]{2})[^:]*:(.*)|\1:\2|'
...작동해야 합니다. 상세히:
-r
sed에게 사용하라고 지시확장 정규식.s|a(b)c(d)|\1:\2|
"matcha
thenb
thenc
및d
전체 내용을b:d
(대괄호 안의 첫 번째 및 두 번째 항목,:
"로 구분)로 대체함을 의미합니다. 여기서a
..d
는 다음과 같습니다.ㅏ.
^.*/
-.*
줄의 시작 부분( )^
부터 문자( )까지 의/
모든 내용 (그래서 우리는 구분된 명령 절|
대신 사용합니다 )./
s
b.
[0-9]{4}-[0-9]{2}-[0-9]{2}
- 숫자([0-9]
)가 4번{4}
, 그 뒤에 숫자-
가 2번, 그런 식으로 계속됩니다.씨.
[^:]*:
- 아무것아니요a:
([^:]*
) 다음에:
.d.
.*
- 그 밖의 모든 것.