我正在尝试解析“/ boot / grub / grubenv”,但在regexp上真的不太好。
假设/ boot / grub / grubenv的内容是:
saved_entry=1
我想输出数字“1”,如下所示。我目前正在使用“awk”,但对其他工具开放。
$ awk '/^(saved_entry=)([0-9]+)/ {print $2}' /boot/grub/grubenv
但显然不行,谢谢你的帮助。
答案 0 :(得分:1)
使用-F
选项指定字段分隔符:
awk -F= '/^saved_entry=/ {print $2}' /boot/grub/grubenv
$1
,$2
,..此处代表字段(由=
分隔),而不是对已捕获组的反向引用。
答案 1 :(得分:0)
如果你想匹配最好使用match
的东西!
即使之后有更多字段并且不需要您更改字段分隔符(包括您正在对数据执行任何其他操作),这也将起作用。
此方法的唯一缺点是它只匹配记录的最左侧匹配,因此如果数据在同一记录(行)中出现两次,那么它将只匹配它找到的第一个。
awk 'match($0,/^(saved_entry=)([0-9]+)/,a){print a[2]}' file
输入
saved_entry=1 blah blah more stuff
输出
1
匹配$0
(记录)中的正则表达式,然后将括号中的任何内容存储为单独的数组元素。
从示例中可以看出这些输出
a[0]
是saved_entry=1
a[1]
是saved_entry=
a[2]
为1