LINUX.ORG.RU
решено ФорумAdmin

sed -H или grep «/begin/,/end/p;d»?

 , ,


0

1

Периодически выдираю что-нибудь из кучи файлов с конфигами. Поскольку hostname в конфиге доверять нельзя, использую имена файлов.

Как правило начинается всё как-то так:

find -name *running.txt | xargs -i grep -H "*" {} | sed "/begin/,/end/p;d;" | ..."

Затем в "..." снова появляется grep для выделения нужных кусков из полученных блоков.

Из эстетических соображений хотелось бы слить первые grep и sed.
awk не предлагать.

★★★★★

Commands Specific to GNU sed
F --- Print out the file name of the current input file (with a trailing newline).

Если я правильно понял назначение grep -H «*» {}

sdio ★★★★★ ()
Последнее исправление: sdio (всего исправлений: 1)
Ответ на: комментарий от sdio

Хмм... странное дело... sed вроде свежий, а в info cведения об 'F' отсутствуют и не срабатывает — ругается на не существующую команду.

Спасибо, буду разбираться.

frob ★★★★★ ()
Ответ на: комментарий от sdio

awk нравится, но если однострочник отдать кому-то из коллег, то придётся объяснять про awk, выяснится, что «что-то не работает» (awk нету) и т.д и т.п.

Наблюдается одинаковое отсутствие 'F' в gnu sed 4.2.1 на двух вроде бы разных федорках и какой-то неновой убунте.
Видимо придётся забить на красоту и оставить как есть.

frob ★★★★★ ()
Ответ на: комментарий от frob

Наблюдается одинаковое отсутствие 'F' в gnu sed 4.2.1 на двух вроде бы разных федорках и какой-то неновой убунте.

появилось в 4.2.2

Sed 4.2.2 > NEWS
* New command `F' to print current input file name

science ★★☆ ()
Последнее исправление: science (всего исправлений: 1)
Ответ на: комментарий от science

О, как...

Гнутая веб-страничка показывает всё это для 4.2.1.

frob ★★★★★ ()

Ну если файлов не много, можно для каждого вызывать sed, както так:

find -name '*running.txt'  -exec sed -n '/begin/,/end/s|^|{}:|p' '{}' \;

только s-выражение не сработает, если в имени файла будут всякие разные символы, значимые для sed'а, например '|'.

mky ★★★★★ ()
Ответ на: комментарий от mky

Файлов, как обычно, тысячи. Из «всяких разных» символов там только слэши в путях.

Поменял на xargs (так привычнее) и убрал «\;» в хвосте.
Работает, спасибо!

frob ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.