次の出力があります。テキストの前の数字を抽出したい。例えば、私はそれが現れることをTrainIdentifyBusinessError
望みます。1612
私はgrepし、それが現れることをTrainIdentifyTechnicalError
望みます。3
1612 TrainIdentifyBusinessError 252 TrainIdentifySuccess 3 TrainIdentifyTechnicalError
ベストアンサー1
あなたは使用することができますsed
...例えば
$ sed -nr 's/.*( |^)([0-9]+) TrainIdentifyBusinessError.*/\2/p' file
1612
または
$ sed -nr 's/.*( |^)([0-9]+) TrainIdentifySuccess.*/\2/p'
252
または
$ sed -nr 's/.*( |^)([0-9]+) TrainIdentifyTechnicalError.*/\2/p'
3
-n
私たちが要求するまで何も印刷しないでください-r
EREを使用.*
行内のすべての文字数( |^)
スペースまたは行の始まり([0-9]+)
1つ以上の数字と(save this)
\2
2番目の逆参照(saved pattern)
p
編集した行を印刷する
後で考えると、これを定期的に実行する必要がある場合は、次のようなシェル関数を作成できます(たとえば、bashを使用している場合はシェル~/.*rc
ファイルに追加)。~/.bashrc
getnum() { sed -nr 's/.*( |^)([0-9]+) TrainIdentify'"$1"'.*/\2/p' "$2" ; }
使用例(コマンドラインでフィールドとファイルの命名 - ファイルが常に同じファイルである場合は、代わりに関数内にフルパスを入力できます"$2"
):
$ getnum BusinessError file
1612
$ getnum TechnicalError file
3
$ getnum Success file
252