文の末尾で「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の検索と置換オプションを使用する方法について詳しく説明します。これは、この回答で提案された元のソリューションをやや無効にします。

BBEditの検索と置換機能を使用した後にテキストを削除するには、代替テキストに検索パターンの埋め込みサブパターンの逆参照を含めることができるという事実をat利用できます。(...)したがって、あなたの目的に応じて使用することができます

(.*) at .*

〜のように探すモード(Grep有効オプション)以前のすべてがat「キャプチャグループ」に保存されるように

\1

これは「キャプチャグループ」の内容にすぎません。変えるテキスト。これはsed本質的に、以下の回答の元のバージョンで提案されているのと同じ解決策です。


元の答え

入力ファイルの名前がと仮定しますcontact-details.txt

sed1つのアプローチは、次のようにを使用することです。

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

これは、便宜上、EREとキャプチャグループを使用して、行全体をその行(最後の行)の前のテキストである括弧s内の部分(最初のキャプチャグループ、次に示す)にのみ置き換えます。一度だけ発生すると仮定されます。\1atat

入力例の場合、出力は次のようになります。

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

別の方法は、次のようgrepに使用することです。Perl互換正規表現構文と「攻撃的予測」を有効にします。

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

これは前のすべてのテキストと一致し、オプションのatおかげで-oただこのテキストを印刷し、atその後の内容はすべて削除します。at機能するには、回線に 1 つしかなければならないという同じ制限があります。

おすすめ記事