ksh環境のファイルから部分文字列を抽出する

ksh環境のファイルから部分文字列を抽出する

以下のエラーメッセージを含むファイルがあります。

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1505) 
rsync error: error in rsync protocol data stream (code 12) at token.c(604)

たとえば、最初の行では23、2行目では12などのコード番号を抽出したいと思います。

答え1

良い

$ grep -o "(code [0-9]*" file | cut -d" " -f2
23
12

答え2

awkを使用すると、さまざまな方法で数字を抽出できます。以下のスクリプトでは、次のパターンが表示されると予想しています。

  1. スペース
  2. (
  3. ひもcode
  4. スペース
  5. 一連の数字
  6. )
  7. スペース

...完全ではないので、文字列で始まる行に一致を制限して範囲をさらに制限してみましたrsync error:

コードの残りの部分は、print前後のテキストを考慮して文字列長パラメータを調整します。

awk '/^rsync error: .* \(code [[:digit:]]+\) / \
  { 
    match($0, " \\(code [[:digit:]]+\\) "); 
    print substr($0, RSTART + 7, RLENGTH - 9) ; 
  }' input

関連情報