세 번째 콜론 이후의 모든 패턴을 인쇄해야 합니다.

세 번째 콜론 이후의 모든 패턴을 인쇄해야 합니다.

아래의 "sometest, readtest, writetest" 전에 이 모든 항목을 제거해야 합니다.

2019-12-09 10:04:34 +0000 Test (err): sometest: some : text server:::test
2019-12-09 10:04:34 +0000 Test (notice): readtest: some
2019-12-09 10:04:34 +0000 Test (info): writetest: some ::: text

예상 출력:

sometest: some : text server:::test
sometest: some
sometest: some ::: text

답변1

그리고 sed:

sed 's/[^:]*:[^:]*:[^:]*: //' file

또는 확장 정규식(ERE)을 사용하세요.

sed -E 's/([^:]*:){3} //' file

바꾸다

  • :그 뒤에 문자 가 아닌 문자가 옵니다 :(3회).
  • 그 뒤에 공백 문자가 옵니다.

빈 문자열로.

산출:

sometest: some : text server:::test
readtest: some
writetest: some ::: text

답변2

sed대괄호가 있다고 확신하면 다음을 사용해 볼 수 있습니다.

sed 's/^.*): //' file

산출:

sometest: some : text server:::test
readtest: some
writetest: some ::: text

또는 잘라내기를 사용하십시오.

cut -d':' -f4- file | sed 's/^ //'

답변3

이를 수행하기 위해 선택할 수 있는 다양한 방법이 있기 때문에 이는 흥미로운 질문입니다. 그 중 일부는 예상치 못한 입력이 있을 때 다소 견고합니다. 견고성을 위해 sometest, readtest, writetest 키워드를 명시적으로 일치시키시겠습니까? 아니면 세 번째 콜론과 일치시키세요. cut 명령을 사용하거나 sed, awk, perl 또는 . .

무시해야 하는 날짜/시간에서 콜론을 지적하면 문제가 더 명확해집니다.

# after 3rd colon (but forgetting to strip the space after it)
sed s/[^:]*:[^:]*:[^:]*://

# this cut command does the same as that sed
cut -d: -f 4-

# A cut command delimiting on space might be better actually 
#  assuming two words always to be stripped "Test (something)" 
# this cut command leaves out the whitespace as expected 
cut -d" " -f6-

# after 3rd colon (strip leading space):
sed "s/[^:]*:[^:]*:[^:]*: *//"

# after 3rd colon (strip leading WHITEspace):
sed "s/[^:]*:[^:]*:[^:]*:\s*//"

# cut all those things explicitly before "sometest,readtest,writetest"
sed -E 's/.*(some|read|write)(test:)/\1\2/'

# exactly the same command works in perl
perl -pe 's/.*(some|read|write)(test:)/\1\2/'

예상 출력에 잘못된 선행 키워드가 포함된 것 같습니다.

sometest: some : text server:::test
readtest: some
writetest: some ::: text

마지막으로, 예제와 로그 파일에는 "test(something)" 비트를 유지하기 위해 cut 명령을 사용하는 등 타임스탬프를 제거하려는 경우가 종종 있습니다.

# A cut command to just strip the timestamp and leave in the "Test (something)" 
cut -d" " -f4-

관련 정보