한 부분이 다른 부분과 같으면 다른 부분을 자르나요?

한 부분이 다른 부분과 같으면 다른 부분을 자르나요?

나는 다음과 같이 이메일 참조 속성 문자열을 사용합니다.

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]):

파트 8(이메일 주소)을 파트 9(보낸 사람 이름)와 비교하여 동일할 경우 파트 8이 제거됩니다. 다음을 남겨주세요:

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

관련 정보