%20%E3%81%AE%E5%BE%8C%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%20(%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E8%A1%8C)%20%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
基本的に、私はこの質問の 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//g
expr
できるだけ何も一致しないものを代用することを意味する(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$