我正在尝试从日志文件中提取几行。它将具有相同的模式,因此我尝试提取它们之间的所有行。
"FLOW:ReserveCapacitiesStep:PrecheckCapacity-X:belowMaxCapacityList: 4
Y918
Y251
Y887
X233
$onMaxCapacityList: 5
Y100
X069
Y010
Y400
Y401
$aboveMaxCapacityList: 0
overruledCapacityList: 0
reservedCapacities: 8
Y918
Y251
Y887
X233
X468
X081
X082
Y001
commonCapacities: 0
mandatoryCapacityList: 2
Y100
Y010
abort:false
"
我想要存在于$ $之间的数据。
请帮助我如何使用正则表达式做到这一点
答案1
使用带有 GNU 扩展的 grep
$ grep -ozP '[$][^$]*[$][^\n]*\n' logfile
$onMaxCapacityList: 5
Y100
X069
Y010
Y400
Y401
$aboveMaxCapacityList: 0
使用 Python
$ python -c 'import re; print(re.search(r"[$][^$]*[$][^\n]*", open("logfile").read()).group())'
$onMaxCapacityList: 5
Y100
X069
Y010
Y400
Y401
$aboveMaxCapacityList: 0
使用 sed:
$ sed -n '/^[$]/,/^[$]/p' logfile
$onMaxCapacityList: 5
Y100
X069
Y010
Y400
Y401
$aboveMaxCapacityList: 0
使用 awk:
$ awk '/^[$]/{print; f=!f; next} f{print}' logfile
$onMaxCapacityList: 5
Y100
X069
Y010
Y400
Y401
$aboveMaxCapacityList: 0