テキスト ファイル内の文字パターン (パターンを含む) の後のすべて (すべての行) を削除するにはどうすればよいでしょうか?

テキスト ファイル内の文字パターン (パターンを含む) の後のすべて (すべての行) を削除するにはどうすればよいでしょうか?

基本的に、私はこの質問の OP が得たが欲しくなかったものが必要です。 ファイル内の特定のパターンまたは文字列の後のすべてを削除するにはどうすればよいですか?

次のようなデータを取得しました:

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

つまり、私が望むのは、スペースの後の一連のドット (および数字) をすべて削除することです。

これまでのところ、私はそこで OP のコマンドを使用しようとしましたが、最初に遭遇したドットの後のすべてが削除されるため、期待どおりには機能しませんでした。つまり、Somethinelse Inc. という種類のデータのドットも削除されます。

最初の .com を 3 つのドットに、2 番目の .com を空白に置き換えて、その質問の最初の (sed) 回答を機能させようとしましたが、失敗しました。今回は、最初のスペースの後のすべてが削除されるか、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,}2回以上出現するごとにドットを一致させる
  • [0-9]すべての数字に一致

  • s/expr//gexprできるだけ何も一致しないものを代用することを意味する(g)

答え3

これはどう:

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

つまり、

1対多(\+)ドット(\。)0対多(*)スペース()AND 1対多(\+) 数字([[:桁:]])そして万が一に備えて(*) 空白 ([[:空間:]])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$ 

関連情報