아래의 "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-