我有一个包含错误消息的文件,如下所示
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,您可以通过多种方式提取数字。下面的脚本期望看到以下模式:
- 空间
(
- 字符串
code
- 空间
- 数字序列
)
- 空间
...这并不是万无一失的,所以我尝试通过将匹配限制在以 string 开头的行来进一步限制范围rsync error:
。
其余print
代码只是调整字符串长度参数以考虑前导和尾随文本。
awk '/^rsync error: .* \(code [[:digit:]]+\) / \
{
match($0, " \\(code [[:digit:]]+\\) ");
print substr($0, RSTART + 7, RLENGTH - 9) ;
}' input