두 번째 콜론을 제거합니다.

두 번째 콜론을 제거합니다.

/var/log/maillog에 나타나는 대기열 번호로 대량 메일을 나열하는 간단한 스크립트를 만들어 보십시오. 나는 이것으로 시작합니다 :

[root@ditirdlns01 ~]# lsMails(){ grep -i "[email protected]" /var/log/maillog | cut -f1-2,4 -d: ;}
[root@ditirdlns01 ~]#

출력:

[root@ditirdlns01 ~]# lsMails systems
Jul  1 15:12: AF649479A
Jul  1 15:14: 024682F59
Jul  1 15:14: 067A447B9
Jul  1 15:14: 0A3EA479A
Jul  1 15:14: 0DCBE5010
Jul  1 15:21: 97DAB2F59
Jul  1 15:24: D1D9B2F59

완전히 괜찮습니다. 단지 두 번째 콜론을 제거하고 싶을 뿐입니다(분명히 로그의 콜론은 분과 초를 구분하는 것입니다). 실제로 사용자가 두 번째 콜론을 보는 것을 원하지 않으므로 이를 자릅니다. 나에게는 매우 효과적입니다.) sed를 통해 파이핑을 시도하여 앞에 숫자와 공백이 오는 콜론을 찾았지만 이전과 동일한 결과를 얻었습니다.

[root@ditirdlns01 ~]# lsMails(){ grep -i "[email protected]" /var/log/maillog | cut -f1-2,4 -d: | sed 's/([0-9]):\s+/ /g';}
[root@ditirdlns01 ~]# lsMails systems
Jul  1 15:12: AF649479A
Jul  1 15:14: 024682F59
Jul  1 15:14: 067A447B9
Jul  1 15:14: 0A3EA479A
Jul  1 15:14: 0DCBE5010
Jul  1 15:21: 97DAB2F59
Jul  1 15:24: D1D9B2F59

내 구체적인 질문은 다음과 같습니다. ([0-9])숫자를 일치시키고 결과에 포함하지 않는 이유는 무엇입니까?

답변1

귀하의 특정 질문에 답변하려면,sed 그룹 캡처이스케이프된 괄호가 필요합니다. 반복되는 문자도 +이스케이프해야 합니다.

sed명령 파이프라인의 일부를 다음으로 바꾸면 작동합니다.

 sed 's/\([0-9]\):\s\+/\1 /g'

답변2

이것은 당신에게 도움이 될 수 있습니다:

sed 's/://2' file

답변3

숫자와 콜론 대신 콜론과 공백을 찾아보는 것이 어떨까요?

이 시도:

lsMails(){ grep -i "[email protected]" /var/log/maillog | cut -f1-2,4 -d: | sed 's/: / /g';}

관련 정보