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
$