한 부분이 다른 부분과 같으면 트리밍합니까?

한 부분이 다른 부분과 같으면 트리밍합니까?

나는 다음과 같은 이메일 인용 귀속 문자열을 사용합니다.

On dd mmm yyyy hh:mm +hhmm, from [email protected] (Example Dot Org):

[email protected]보낸 사람의 이메일 주소는 어디에 있고 Example Dot Org보낸 사람의 실제 이름은 어디입니까?

실제 이름이 제공되지 않은 경우(또는 때로는 존재하는 경우에도) 두 개는 동일하며 다음과 같은 속성 문자열로 끝납니다.

On dd mmm yyyy hh:mm +hhmm, from [email protected] ([email protected]):

이런 경우에만 해당 부품을 제거하고 다음 항목만 남기고 싶습니다.([email protected])

On dd mmm yyyy hh:mm +hhmm, from [email protected]:

나는 편집자에게 이메일을 보내기 전에 이메일을 처리하기 위해 Perl을 호출하는 쉘 스크립트를 이미 가지고 있으며, 속성 라인을 처리하기 위해 여기에 몇 가지 코드를 추가하기만 하면 될 것이라고 생각하고 있습니다. 해결책은 Perl, awk, sed 또는 다른 것에서 수행될 수 있습니다.~도이국적인).

나는 귀속 라인이 입력의 첫 번째 빈 줄 다음에 오는 공백이 아닌 첫 번째 라인이라는 것을 알고 있으며, 내가 선호하는 귀속 라인 형식에 대해 하드코딩하는 것에 신경 쓰지 않습니다. 단순히 괄호 안의 부분을 삭제하는 것은 쉽지 않지만,앞선 것과 같을 때만 어떻게 할 수 있나요?이메일(텍스트 파일)의 다른 내용을 변경할 위험 없이 사용하는 것이 좋습니다.

답변1

두 번 나타나는 주소를 포함하는 하위 문자열을 하나의 주소만 포함하는 하위 문자열의 전반부로 대체하면 됩니다.

bash-4.2$ echo '
On dd mmm yyyy hh:mm +hhmm, from [email protected] (Example Dot Org):
On dd mmm yyyy hh:mm +hhmm, from [email protected] ([email protected]):
On dd mmm yyyy hh:mm +hhmm, from [email protected]:
' | sed -r 's/(, from (\S+)) \(\2\)/\1/'

On dd mmm yyyy hh:mm +hhmm, from [email protected] (Example Dot Org):
On dd mmm yyyy hh:mm +hhmm, from [email protected]:
On dd mmm yyyy hh:mm +hhmm, from [email protected]:

답변2

perl -lane 'print "($F[07]):" eq "$F[8]" ? "@F[0..7]:" : "@F"'

이 Perl 한 라이너는 문자열을 공백으로 분할하므로 다음 문자열은 9개 부분으로 분할됩니다.

On dd mmm yyyy hh:mm +hhmm, from [email protected] ([email protected]):

part8(이메일 주소)을 part9(보낸 사람 이름)과 비교하여 동일하면 part8이 제거됩니다. 당신에게 다음을 남겨주세요:

On dd mmm yyyy hh:mm +hhmm, from [email protected]:

관련 정보