Text-Processing
如何刪除“at”之後的句子末尾的文本?
我有一個大數據,正在尋找一個
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
另一種方法是使用
grep
與Perl 兼容的正則表達式語法啟用和“積極的前瞻”:grep -Po '.*(?= at )' contact-details.txt
這將匹配 之前的任何文本
at
,並且由於該-o
選項僅列印該文本,從而丟棄at
和之後的任何內容。它具有相同的限制,即必須只有一個at
線上才能工作。