在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 和第二行中的 12。

答案1

喜欢

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

答案2

使用 awk,您可以通过多种方式提取数字。下面的脚本期望看到以下模式:

  1. 空间
  2. (
  3. 字符串code
  4. 空间
  5. 数字序列
  6. )
  7. 空间

...这并不是万无一失的,所以我尝试通过将匹配限制在以 string 开头的行来进一步限制范围rsync error:

其余print代码只是调整字符串长度参数以考虑前导和尾随文本。

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

相关内容