GNU 도구를 사용하여 동일한 문자열의 두 하위 문자열을 추출하고 병합하는 방법은 무엇입니까?

GNU 도구를 사용하여 동일한 문자열의 두 하위 문자열을 추출하고 병합하는 방법은 무엇입니까?

실행 후 다음 결과를 얻었다고 가정합니다.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|'

...작동해야 합니다. 상세히:

  1. -rsed에게 사용하라고 지시확장 정규식.

  2. s|a(b)c(d)|\1:\2|"match athen bthen cd전체 내용을 b:d(대괄호 안의 첫 번째 및 두 번째 항목, :"로 구분)로 대체함을 의미합니다. 여기서 a.. d는 다음과 같습니다.

    ㅏ. ^.*/- .*줄의 시작 부분( ) ^부터 문자( )까지 의 /모든 내용 (그래서 우리는 구분된 명령 절 |대신 사용합니다 )./s

    b. [0-9]{4}-[0-9]{2}-[0-9]{2}- 숫자( [0-9])가 4번 {4}, 그 뒤에 숫자 -가 2번, 그런 식으로 계속됩니다.

    씨. [^:]*:- 아무것아니요a :( [^:]*) 다음에 :.

    d. .*- 그 밖의 모든 것.

관련 정보