타임 스탬프가있는 로그 파일이 있습니다. 때때로 한 줄에 여러 개의 타임 스탬프가 있습니다. 이제 줄에서 모든 타임 스탬프를 제거하고 첫 번째 타임 스탬프를 유지하고 싶습니다.
할 수는 s/pattern//2
있지만 두 번째 항목 만 제거하고 sed
같은 것을 허용하지 않습니다 s/pattern//2-
.
어떤 제안?
답변
GNU로 sed
:
sed 's/pattern//2g'
2
지정은 두 번째 패턴과 모든 나머지는 g
제거해야합니다. 그래서 이것은 첫 번째를 유지할 것입니다.
답변
이것은 작동해야합니다 (_를 로그와 충돌하면 _를 다른 것으로 대체하십시오).
sed -e 's/pattern/_&/1' -e 's/\([^_]\)pattern//g' -e 's/_\(pattern\)/\1/'
답변
sed -e ':begin;s/pattern//2;t begin'
또는 sed goto없이 :
sed -e 's/\(pattern\)/\1\n/;h;s/.*\n//;s/pattern//g;H;g;s/\n.*\n//'
n 번째 위치 (예 : 3)에서 제거 할 수있는 일반적인 솔루션은 다음과 같습니다.
sed -e ':begin;s/pattern//4;t begin'
sed -e 's/\(pattern\)/\1\n/;h;s/.*\n//3;s/pattern//g;H;g;s/\n.*\n//'
답변
@jillagre의 답변 (견고성을 위해 수정 됨)의 약간의 변형 은 다음과 같습니다.
sed 's/p\(attern\)/p\n\1/;s///g;s/\n//'
… 어떤 경우에는 첫 번째 ubstitution 문의 오른쪽 에있는 문자를 ewline 문자 sed
로 바꿔야 할 수도 있습니다 .n
s///
\n