この形式のファイルがあります
[2014/05/01 10:48:26 | 13963 | DEBUG]プロセスの完了に11.16837501525879秒かかりました。
だから私はこのような何千もの行を持っていて、私が試した11.16837501525879
部分を「抽出」したいと思います
。
sed -e 's/^.* (\d+\.\d*)/\1/g' logfile.txt > out.txt
しかし、私は次のようになります。
sed: -e expression #1, char 21: invalid reference \1 on `s' command's RHS
ここで何ができますか?
ベストアンサー1
sed
デフォルトの正規表現はデフォルトで使用され、BREには不明です\d
。以下はいくつかの異なる方法です。
sed
sed -r 's/.* ([0-9]+\.*[0-9]*).*?/\1/' logfile.txt > outfile.txt
-r
括弧をエスケープしないために必要です。perl
perl -pe 's/.* (\d+\.*\d*).*/$1/' logfile.txt > outfile.txt
grep
grep -Po '.* \K\d+\.*\d*' logfile.txt > outfile.txt
これらはすべてfindを埋めるための基本的な方法を使用します。みんな1行目の前にスペースが続く数値のグループです。行に表示できる数値セットの数に応じて入力行が常に表示する形式の場合、より安全なアプローチは次のとおりです。
grep -Po 'took \K\d+\.*\d*' logfile.txt