sed /foo/,/bar/ * соответствует границе файла

У меня есть файлы *.txt с контентом

бла бла Управление бла
вещи, которые я не хочу, бла

Управление 10/10/15
вещи, которые я хочу

обзор

При обработке одного файла с

sed -nr '/Management.[0-9]/{:a;n;/Overview/b;p;ba}' 1.txt

я получил

stuff I want

При обработке нескольких файлов одной командой

sed -nr '/Management.[0-9]/{:a;n;/Overview/b;p;ba}' *.txt

я получил

вещи, которые я не хочу, бла

Управление 10/10/15
вещи, которые я хочу

Что дает? Мне нужно что-то вроде

/Management[[:space:]][0-9]

Но не могу разобраться, как вписать это в САС. Я думаю, что у меня было это прошлой ночью, затем закрыли без сохранения. (однако, я не проверил это глубоко в данных и, возможно, что-то упустил. Попытка восстановить историю bash привела меня сюда).

Эти текстовые файлы конвертированы из PDF-файлов и пробелы могут быть неразрывными.

2 ответа

Решение

Это /Management*[0-9]/ образец оболочки, где * означает "ноль или более любых символов". см. https://www.gnu.org/software/bash/manual/bashref.html для получения дополнительной информации.

Вам нужны регулярные выражения sed, задокументированные по адресу https://www.gnu.org/software/sed/manual/sed.html

/Management \+[0-9]/

Это слово "Управление", за которым следуют один или несколько пробелов, за которыми следует цифра.

Если вы хотите материал между строкой, содержащей Management и по крайней мере одна цифра и следующая строка, содержащая Overviewвот что ты спрашиваешь sed производить:

sed -n -e '/Management.*[0-9]/,/Overview/ { /Overview/d; p; }'

Данный файл data содержащий:

blah blah. Management blah
stuff I don't want blah

Management 09/10/15
stuff I do want

Overview
Not wanted
Please ignore

Я получаю вывод:

$ sed -n -e '/Management.*[0-9]/,/Overview/ { /Overview/d; p; }' data data
Management 09/10/15
stuff I do want

Management 09/10/15
stuff I do want

$
Другие вопросы по тегам