unixコマンドから行末まで「[0-9]」以降の内容をすべて抽出します。

unixコマンドから行末まで「[0-9]」以降の内容をすべて抽出します。

次の項目を含むファイルがあるとします。

5. variable1:
10. variable7:
230. variable21803:

「5」などを使わずに、すべての変数を出力にしたいと思います。私が試したことは

grep -Po '(?<=^[0-9] )[.\n]+

ただし、結果は返されません。私はUNIXに初めて触れたので、助けてくれてありがとう。

以下は、前にスペースがある更新されたテストです。

    ranodm text 
   1. variable1:
   2. variable10:
   3. variable302:

ベストアンサー1

このgrepユーティリティはインライン編集には適していません。標準的な用途は、特定の正規表現または文字列に一致する行を抽出することです。sedこのタイプの編集では、エディタがより一般的に使用されます。

次のコマンドは、sedファイルの各行から最初の空白文字の前にあるすべての項目を削除する方法を示します。

$ sed 's/[^ ]* //' file
variable1
variable7
variable21803

この式は、s/[^ ]* //空白のないゼロ文字以上の後にスペースが続くものと一致します。次に、一致する部分文字列を何もないものに置き換えます(つまり、削除します)。

行の先頭の整数と空白の前に点が一致する必要がある場合は、次のことができます。

$ sed 's/^[[:digit:]]*\. //' file
variable1
variable7
variable21803

これは行の先頭のゼロ以上の数字と一致し、その後にドットとスペースが続きます。一致するものがあれば削除されます。


更新された質問は、各行の両端からデータを削除することとはまったく異なることを要求します。

さまざまな方法でこれを実行できます。次のコマンドは、質問のデータに従って、行から最後のスペースまでの最初のビットを削除し、最後のすべての行から:最後のビットを削除する方法を示しています。:

$ sed '/:$/ { s///; s/.* //; }' file
    ranodm text
variable1
variable10
variable302

または最初にランダムなテキストが必要ない場合:

$ sed -n '/:$/ { s///; s/.* //p; }' file
variable1
variable10
variable302

おすすめ記事