如果一個部分等於另一部分,則修剪另一部分?

如果一個部分等於另一部分,則修剪另一部分?

我使用這樣的電子郵件引用歸屬字串:

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

我已經有一個 shell 腳本,它在將電子郵件提供給我的編輯器之前調用 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 one liner 會以空格分割字串,因此以下字串將被分割成 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]:

相關內容