Text-Processing

如何刪除“at”之後的句子末尾的文本?

  • October 12, 2022

我有一個大數據,正在尋找一個grep命令來刪除文本並保留這句話上的職稱,我已經使用這個 grep 命令^.*?at來獲取單詞後的公司名稱,at但這次我想保留他們的職稱,哪個grep命令我應該使用嗎?

CEO at Insurance Menu
Founder & CEO at insurtech
AVP, Alliances and Analyst Relations  at ValueMomentum
AGV-President at Aflac Ventures

例如,第一行的最終結果應該是CEO,從單詞中刪除整個文本at Insurance Menu

我正在使用 BBEDIT(查找並替換所有)功能。

更新在對問題的編輯中,詳細說明了要使用 BBEdit 的“查找和替換”選項。這在一定程度上使該答案中提出的原始解決方案無效。

為了在at使用 BBEdit 的“查找和替換”功能之後刪除文本,您可以利用替換文本可以包含(...)對搜尋模式的封閉子模式的反向引用這一事實。所以,為了你的目的,你可以使用

(.*) at .*

作為查找模式(Grep啟用選項),以便將之前的所有at內容儲存在“擷取組”中,並且

\1

這只是“擷取組”的內容,作為替換文本。sed這與下面答案的原始版本中提供的解決方案基本相同。


原始答案

假設您的輸入文件名為contact-details.txt.

一種方法可能是使用sed,如下

sed -E 's/(.*) at .*/\1/' contact-details.txt

這使用 ERE(為方便起見)和擷取組s僅用括號中的部分(第一個擷取組,表示為 )替換(替換)整行\1,這是該行(最後一個)之前的文本at。它假設只有一次出現at

對於您的輸入範例,輸出將是:

CEO
Founder & CEO
AVP, Alliances and Analyst Relations
AGV-President

另一種方法是使用grepPerl 兼容的正則表達式語法啟用和“積極的前瞻”:

grep -Po '.*(?= at )' contact-details.txt

這將匹配 之前的任何文本at,並且由於該-o選項列印該文本,從而丟棄at和之後的任何內容。它具有相同的限制,即必須只有一個at線上才能工作。

引用自:https://unix.stackexchange.com/questions/720681