テキストファイルから文字パターン(パターンを含む)の後のすべてのコンテンツ(すべての行)を削除するには?

テキストファイルから文字パターン(パターンを含む)の後のすべてのコンテンツ(すべての行)を削除するには?

デフォルトでは、この質問のOPが得られますが、望ましくないことが必要です。 ファイルから特定のパターンまたは文字列の後のすべての項目を削除するには?

だから私が得たデータは次のようになります。

Something and something ........................... 23
Another one .......................................123
Somethingelse Inc. .................................243

だから私が望むのは、スペースを削除した後の全点(および数字)です。

今までそこからOPコマンドを試してみましたが、最初に会ったポイント以降のすべてのエントリを削除するので、期待どおりに動作しません。これは Somethinelse Inc.カテゴリデータのポイントも削除されるという意味です。

私は最初の.comを3つの点に置き換え、2番目の.comを空白に置き換えて、この質問に対する最初の答えが機能しようとしましたが失敗しました。今回は、最初のスペースを削除するか、3つのドットの後ろのすべての内容を残します。

2番目の答え(例:-sc ...)はOPが必要に応じて実行されますが、いくつかのポイントが残っているので幸運ではありません。

また、この回答に基づいてコマンドを適用しようとしましたが、失敗しました。行からあるパターンの前のすべての項目と別のパターンの後のすべての項目を削除するにはどうすればよいですか?

答え1

sed 's/ \.\..*$//' /path/to/file動作する必要があります:

 \.\. - A space followed by two literal periods
.*    - One or characters of any type
$     - End of line 

答え2

別のあまりエレガントな解決策は次のとおりです。

cat path/to/yourfile | sed -E "s/[\.]{2,}//g" | sed "s/[0-9]//g" > path/to/new_file

どこ:

  • -E正規表現を拡張された(現代的な)正規表現として解釈する
  • [\.]{2,}複数回発生するたびに点と一致します。
  • [0-9]すべての数字と一致

  • s/expr//gexpr可能な限り何も一致しない代替を示します(g)

答え3

これはどうですか:

sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g'

意味は次のとおりです

カップル+多く(\+)指す(\.)0対多数(*)スペース( )そして一対(\+) 数字([[:数値:]])そしてもしかして(*) スペース ([[:空間:]])AND行末($)

テスト(2行目に「... 234」を挿入し、その後にタブ/スペースを挿入しました):

Something and something ........................... 23<Tab>
An ...234 other one .......................................123<space>
Somethingelse Inc. .................................243<some spaces>

結果:

xb@dnxb:/tmp$ sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g' sample.txt
Something and something 
An ...234 other one 
Somethingelse Inc. 
xb@dnxb:/tmp$ 

関連情報