如何删除句子末尾“at”后面的文字?

如何删除句子末尾“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(查找并替换全部)功能。

答案1

更新在对问题的编辑中,详细说明了要使用 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

另一种方法是使用grepwithPerl 兼容的正则表达式启用语法和“积极的前瞻”:

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

这将匹配之前出现的任何文本at,并且感谢该-o选项仅有的打印该文本,从而丢弃at以及之后的任何内容。它具有相同的限制,即线路上必须只有一个at才能工作。

答案2

at要删除两侧各有一个空格的单词及其后的所有内容:

sed 's/ at .*//' file1.txt

给定示例文本,这将产生

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

相关内容