Код: Выделить всё
cat text.txt | sed -n '1,20p'
Вместо числовой константы 20 нужно использовать переменную, которая будет определяться ранее в скрипте. Как эту переменную sed'у подсунуть?
Модераторы: /dev/random, Модераторы разделов
Код: Выделить всё
cat text.txt | sed -n '1,20p'
Код: Выделить всё
limit=20; cat text.txt | sed -n "1,${limit}p"
Фига се, как ту ярлыки развешивают.
Спасибо. То, что надо.allez писал(а): ↑21.05.2012 13:49А если попробовать двойные кавычки?
Код: Выделить всё
limit=20; cat text.txt | sed -n "1,${limit}p"
P. S. Проверил у себя - сработало.
Ярлыки всегда легко развешивать.
Код: Выделить всё
limit=20; head -n$limit <file>
$
sed '' file.txt
Я же написал выше. Хотя да, зачем читать чужие посты с обоснованиями. Проще ярлыки развешивать.
Код: Выделить всё
sed -o -p -t -i -o -n -s 'sed_command' unbelievably_looooooooooooooooooooooooooooooooong_filename
Код: Выделить всё
cat unbelievably_looooooooooooooooooooooooooooooooong_filename | sed -o -p -t -i -o -n -s 'sed_command'
просто так мимо проходил и вспомнил (ничуть не пытаясь встрять в дискуссию): для навигации по словам есть ctrl+<left arrow>, ctrl+<right arrow>, M-f, M-b…
Код: Выделить всё
sed -options 'command' unbelievably_looooooooooooooooooooooooooooooooong_filename
и ещё, просто мимо проходя:
Ну это лишние кнопки нажимать. Так неинтересно.
Слышал. Но не всегда лишняя сущность - плохо. Порой она создаётся в угоду удобству.
А вот это действительно аргумент. Убедили. Я - нуб (:
да я просто мимо проходил…
drBatty писал(а): ↑24.05.2012 19:43
возможно вы и правы, но в данном конкретном случае нет никакого профита в прокачке файла через пайп. только лишнее время и лишняя память. да и сама по себе cat нужна для объединения файлов, а совсем не для этого.
ЗЫЖ как лично Вам писать - решать Вам. Но вот советовать неправильные команды ИМХО не нужно.
Я не говорю о замене именно sed. Я говорю, что с таким подходом заменить последную команду легче. И не вижу причин использовать другой подход именно для sed (который я тоже вряд ли стану заменять).drBatty писал(а): ↑27.05.2012 09:50замена sed на grep не имеет смысла, т.к. sed это просто более мощная grep. Т.е. функционал sed'а полностью перекрывает функционал grep.
замена sed на less также не имеет смысла, но уже по иной причине: less это пейджер, и его имеет смысл использовать для просмотра результатов, т.е. добавлять _после_ sed, но никак не _вместо_. Такая замена имхо притянута за уши, ибо я не помню случая, когда мне-бы захотелось сменить sed на less.
drBatty писал(а): ↑27.05.2012 09:50а какие из coreutils не умеют принимать аргумент в виде файла? Если уж придираться, то учтите, что формально stdin это тоже файл, и ничто другое. Использование cat переводит один файл, в другой, и уже этот другой (stdin) служит аргументом второй команды. Напрашивается ИМХО очевидный вопрос: зачем? Ну давайте сделаем ещё один fifo, откроем второй терминал, в первом будем писать, во втором - читать. Так тоже работает, и так тоже иногда оправданно. Но вопрос "зачем?" всё равно имеет место быть в 99.9% случаев.
А заодно -D и -d. Да и со всякими -C <NUM> и -m <NUM> придётся изрядно помучаться.
От себя добавлю: по функционалу действительно во многом перекрывает (хотя и не полностью), а вот по скорости или, скажем, простоте использования -- _далеко_ не всегда. Впрочем, всё это уже оффтопик в квадрате./dev/random писал(а): ↑27.05.2012 09:56Заблуждаетесь. Попробуйте-ка реализовать на sed'е аналог grep -L.
/dev/random писал(а): ↑27.05.2012 09:56Заблуждаетесь. Попробуйте-ка реализовать на sed'е аналог grep -L.
drBatty писал(а): ↑04.06.2012 16:18/dev/random писал(а): ↑27.05.2012 09:56Заблуждаетесь. Попробуйте-ка реализовать на sed'е аналог grep -L.
легко. Например find+sed. Если sed-скрипт не имеет доступа к имени текущего файла, это совсем ни о чём не говорит. Да и grep -L это уж очень малоизвестное GNUтое расширение...
Код: Выделить всё
...
drBatty писал(а): ↑04.06.2012 16:48
/dev/stdin это тоже имя файла. По умолчанию. Мне кажется, засовывать _все_ файлы в файл по умолчанию - плохая идея. Например потому, что например ssh (и многие другие утилиты) ждут пароль именно в /dev/stdin. Да и не только пароль. Та же read внутри скрипта читает именно /dev/stdin, и подсовывать содержимое файлов как /dev/stdin тут вряд-ли получится.
drBatty писал(а): ↑04.06.2012 16:48я тоже. Если вы используете конструкцию cat file1 file2 file3 | command, то команда не узнает ни имён файлов, ни даже того, что это три разных файла, а не 1 и не 10. Для sed это не очень заметно (подумаешь, опция -i и адрес $ не сработают, первая вообще в принципе, второй сработает неправильно), то вот для всяких grep -L это очень важно.
drBatty писал(а): ↑04.06.2012 16:48ну и какие полезные следствия от сосания пальцев? ИМХО никаких. Сл-но это не нужно.
точно также с cat - пользы никакой, кроме притянутых за уши (типа хочу чупачупс, в магазин идти далеко, потому сосу палец). А вот вред _может_ быть, хотя в большинстве случаев, конечно, вреда от того нету.
drBatty писал(а): ↑04.06.2012 16:48
вот и реализуйте мне всякие grep -d, D через конструкцию cat * | grep -d :-)
дык тут аргументы из серии "я не знаю, что можно писать sed '' file.txt, потому мне проще cat file.txt | sed ''!"
А по мне, использование cat file|command это использование молотка для всего (и для гвоздей, и для болтов, и для шурупов). Какая-то нелепая "унификация" ИМХО. И не надо мне говорить, что я объявил войну молоткам (команде cat)...