パターンに一致する前に単語を見つけるにはgrepを使用してください。

パターンに一致する前に単語を見つけるにはgrepを使用してください。

次の出力があります。テキストの前の数字を抽出したい。例えば、私はそれが現れることを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私たちが要求するまで何も印刷しないでください
  • -rEREを使用
  • .*行内のすべての文字数
  • ( |^)スペースまたは行の始まり
  • ([0-9]+)1つ以上の数字と(save this)
  • \22番目の逆参照(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

おすすめ記事