-1

Я пытаюсь извлечь несколько строк из файла журнала. У него будет тот же шаблон, поэтому я пытаюсь извлечь все строки между ними.

"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 ответ1

2

Использование grep с расширениями GNU

$ 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .