LINUX.ORG.RU

Откусить первую строчку у файла

 


0

1

Есть текстовый файл, состоящий из строк ( разделитель - \m ) Нужно с каждый запросом к данному файлу откусить верхнюю строчку файла ( те соотв вывести ее содержимое на stdout ) и изменить данный файл ( убрать верхнюю строчку ). Можно это сделать в «одну строку» ?

★★☆☆

Ответ на: комментарий от derlafff

Ну у тебя тоже не венец эволюции...хеды...седы...
Мне вот интересно, почему нельзя на sed забабахать всё в один проход, скажем, чем-нить вроде sed -i '1p;1d' file
Может drBatty проконсультирует?

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

почему нельзя на sed забабахать всё в один проход, скажем, чем-нить вроде sed -i '1p;1d' file

Потому что -i. In place. У sed'а только один выход, stdout.

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

Мне вот интересно, почему нельзя на sed забабахать всё в один проход

Без использования аццких костылей вроде юзанья stderr нет.

Так что мой вариант в разы лучше и лучший :3

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

Тот случай, когда хорошо бы вспомнить хорошо забытое старое:

echo -e «1,p\n1,d\nw» | ed -s /path/to/file

Командам 40 лет...

Вообще, в этом смысле классический ed понятнее, он не stream editor, а просто редактор с возможностью автоматизации действий. Sed напоминает функциональный подход (нельзя вернуться к началу stream'a/состояния), а ed это такой императивный подход — глобальный вид сверху, что хочу то и делаю. :-)

hexdump01010101
()
Ответ на: комментарий от derlafff

Забавно. Действительно, проверил на дебиане — по дефолту уже нету.
В openSUSE 12.1 — есть.
Fedora 17 — есть.

И кто-то еще будет гнать на Федору и Леннарта, мол делают из Linux не-Ъ? По факту оказывается они-то ближе всего к Ъ, хехе. (По FHS, ed есть optional, так что вполне имеют право выкинуть, а жаль.)

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

Это лишь доказывает, что в федоре и сусе куча говна из коробки, которую никто почти не юзает

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

Пакет: ed Состояние: установлен Автоматически установлен: да Версия: 1.6-2 Приоритет: необязательный Раздел: editors Сопровождающий: Martin Zobel-Helas <zobel@debian.org> Архитектура: amd64 Размер в распакованном виде: 127 k Зависимости: libc6 (>= 2.11), dpkg (>= 1.15.4) | install-info Конфликтуют: ed Описание: classic UNIX line editor Сайт: http://www.gnu.org/software/ed/

vahtu
()
Ответ на: комментарий от derlafff

Что значит даже? ed тоже в бизибоксе есть (CONFIG_ED). А head ровно так же можно из бизибокса выпилить (CONFIG_HEAD=n).

Спору нет, что в текущих реалиях head будет предпочтительным, чем ed.
Если в дебиане есть ex (в моем есть, но я не уверен, что он не поставился через vim), то тогда победа за ex — ex будет во всех «больших» дистрибутивах.

hexdump01010101
()
Ответ на: комментарий от zolden

Может drBatty проконсультирует?

Есть текстовый файл, состоящий из строк ( разделитель - \m )

именно \m? я надеюсь это опечатка.

тогда так:

sed -i '1w/dev/stdout
1d' t
я надеюсь, ваш терминал позволяет вводить команды из двух строк.

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

Потому что -i. In place. У sed'а только один выход, stdout.

4.2

info sed про w и W.

Есть ещё модификатор и команда e.

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

Забавно. Действительно, проверил на дебиане — по дефолту уже нету.

А Gentoo и Ubuntu — Ъ. Там есть по дефолту :)

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

Надо бы добавлять, что это нестандартные GNU-расширения.

а там (в sed) на 90% нестандартные GNUтые расширения. Без них sed это тупой фильтр, и приходится городить нелепые конвейеры с head и прочим (которые, ЧСХ, тоже нестандартные).

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