私はこのようなファイルを持っています:
other lines . . .
blah blah blah (:34)
上記のファイルで数字の出現を見つけたい。私は思いついた:
grep [0-9] filename
しかし、それは全体を印刷しています:
blah blah blah (:34)
むしろ、34
のみが必要です。そうする方法はありますか?
grep -E
を使用して、拡張正規表現構文にアクセスできます(egrepと同じ)
以下の内容のテストファイルを作成しました:
>cat testfile
this is some text
with some random lines
again some text
ok now going for numbers (:32)
ok now going for numbers (:12)
ok now going for numbers (:132)
ok now going for numbers (:1324)
今、あなたが使用できるテキストから数字だけをグレップする
>grep -Eo '[0-9]{1,4}' testfile
32
12
132
1324
出力されます。
ここで"-o"は、行の内容全体ではなく、行の一致するセグメントのみを出力するために使用されます。
波線の括弧(例:{および})は、一致のインスタンスの数を示します。 {1,4}では、前の文字または文字クラスが少なくとも1回出現する必要がありますが、4回以内でなければなりません。
お役に立てれば
POSIX standard のセクション9.3.5で指定されたREブラケット式[:digit:]
を-o
フラグと組み合わせて使用して、一致する「単語」のみを印刷できます。
$ grep -o '[[:digit:]]*' <<< $'No number in this line\nbut 123 here'
123
grep -o
は、行の一致部分のみを出力します。それ以外の場合、grepはパターンを含む行を出力します。
curlを使用してローカルまたはリモートでファイルにアクセスし、(())でラップされた数字で行をgrepし、それらの断片を切り取ってファイルに書き込みます
受け入れられた答えは、ファイルの前の行に数字がある可能性があることを無視しますが、サンプルデータでは機能しますが、ファイルがリモートの場合はどうなりますか?
ローカル
curl file:///home/$USER/Public/input.txt | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt
この例では、現在のフォルダーのoutput.txt
が上書きされます。パブリックフォルダーからinput.txt
にアクセスします。
リモート
curl https://yoursite.com/Public/input.txt | grep -o '(:.*)' | cut -d ":" -f 2 | cut -d ")" -f 1 > output.txt
この例では、現在のフォルダーのoutput.txt
が上書きされ、input.txt
からhttps://yoursite.com/Public/
にアクセスします。