이메일이 나타난 후 일부 텍스트가 나타나기 전에 모든 것을 분할하는 방법이 필요합니다.
예시 형식은 다음과 같습니다.
[email protected]:0:3rw3e:weofkew:StackOverflow=
[email protected]:19.2132.1:StackOverflow=
필수 형식은 다음과 같습니다.
[email protected]:StackOverflow= (followded by everything else on the line).
따라서 본질적으로 StackOverflow=
이메일이 나타난 후와 나타나기 전에 슬라이싱합니다.
참고: 모든 이메일은 고유하며 문자 그대로의 의미는 아닙니다.[email protected]
답변1
sed -r 's/(@[^:]+:).*(StackOverflow=)/\1\2/' input.txt
설명하다
sed -r 's/foo/bar/' input.txt
: 확장 정규 표현식과 함께 sed를 사용하여 파일 패턴을foo
, .bar
input.txt
(@[^:]+:).*(StackOverflow=)
:@
이메일 주소에서 일치하고 그 뒤에 문자가 아닌:
문자([^:]+
)가 1개 이상 나옵니다. 그런 다음:
사용된 첫 번째 캡처 그룹이 모든 것을 캡처합니다()
. 다음은 그룹으로 캡처한 일부 캐릭터.*
입니다 .StackOverflow=
()
/1/2
: 이 표현식을 이메일 주소의 일부(위의 첫 번째 캡처 그룹)로 바꾸고 중간 부분을 건너뛴 다음 두 번째 캡처 그룹을 대체합니다.
@
이는 이메일 주소 형식, 줄 수 , StackOverflow=
줄당 줄 수 등과 같은 입력 파일의 형식에 대해 많은 가정을 한다는 점에 유의하세요.