[Решено] Переменная в аргументах редактора sed

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
newsrc
Сообщения: 314
ОС: Slackware

[Решено] Переменная в аргументах редактора sed

Сообщение newsrc »

Вывожу часть текстового файла:

Код: Выделить всё

cat text.txt | sed -n '1,20p'
т.е. первые двадцать строк.
Вместо числовой константы 20 нужно использовать переменную, которая будет определяться ранее в скрипте. Как эту переменную sed'у подсунуть?
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: [Решено] Переменная в аргументах редактора sed

Сообщение allez »

А если попробовать двойные кавычки?

Код: Выделить всё

limit=20; cat text.txt | sed -n "1,${limit}p"

P. S. Проверил у себя - сработало.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Переменная в аргументах редактора sed

Сообщение drBatty »

'1,'"limit"'...
зЫж cat тут пишут только нубы.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4813
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: [Решено] Переменная в аргументах редактора sed

Сообщение SLEDopit »

drBatty писал(а):
21.05.2012 13:53
зЫж cat тут пишут только нубы.
Фига се, как ту ярлыки развешивают.
Я тоже так же пишу, когда нужно какую-нибудь фигню отладить. Гораздо удобнее нажать клавишу вверх и редактировать команду sed сразу же, а не передвигаясь в середину команды. Особенно если имя файла километровое.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
newsrc
Сообщения: 314
ОС: Slackware

Re: [Решено] Переменная в аргументах редактора sed

Сообщение newsrc »

allez писал(а):
21.05.2012 13:49
А если попробовать двойные кавычки?

Код: Выделить всё

limit=20; cat text.txt | sed -n "1,${limit}p"

P. S. Проверил у себя - сработало.
Спасибо. То, что надо.


SLEDopit писал(а):
21.05.2012 13:59
drBatty писал(а):
21.05.2012 13:53
зЫж cat тут пишут только нубы.
Фига се, как ту ярлыки развешивают.
Ярлыки всегда легко развешивать.

Спасибо, вопрос исчерпан.
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Переменная в аргументах редактора sed

Сообщение drBatty »

SLEDopit писал(а):
21.05.2012 13:59
Фига се, как ту ярлыки развешивают.
Я тоже так же пишу, когда нужно какую-нибудь фигню отладить.

а это не я. Давно известный факт, кстати. Писать тут cat - дурацкая привычка, как сосать палец. Хотя да, когда ребёнок сосёт палец, он успокаивается и сосредотачивается. Плохо, если это уже не ребёнок.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: [Решено] Переменная в аргументах редактора sed

Сообщение ZyX »

drBatty писал(а):
22.05.2012 08:20
SLEDopit писал(а):
21.05.2012 13:59
Фига се, как ту ярлыки развешивают.
Я тоже так же пишу, когда нужно какую-нибудь фигню отладить.

а это не я. Давно известный факт, кстати. Писать тут cat - дурацкая привычка, как сосать палец. Хотя да, когда ребёнок сосёт палец, он успокаивается и сосредотачивается. Плохо, если это уже не ребёнок.

Сосать палец плохо, потому что потом вы либо испачкаете пальцем что‐то, либо занесёте инфекцию в рот. Желаю услышать логичное обоснование неиспользования cat.
Спасибо сказали:
IMB
Сообщения: 2545
ОС: Debian

Re: [Решено] Переменная в аргументах редактора sed

Сообщение IMB »

Как вариант:

Код: Выделить всё

limit=20; head -n$limit <file>
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: [Решено] Переменная в аргументах редактора sed

Сообщение ZyX »

IMB писал(а):
23.05.2012 12:11
Как вариант:

Код: Выделить всё

limit=20; head -n$limit <file>

Кстати, наиболее безопасный (если добавить кавычки либо использовать zsh) если считать, что $limit — строка из недоверенного источника. Ещё лучше — что угодно из уже предложенного, но с $(( limit )) вместо $limit/${limit}.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Переменная в аргументах редактора sed

Сообщение drBatty »

ZyX писал(а):
22.05.2012 22:35
Сосать палец плохо, потому что потом вы либо испачкаете пальцем что‐то, либо занесёте инфекцию в рот. Желаю услышать логичное обоснование неиспользования cat.

может вы озвучите логичное обоснование использования cat? Учитывая, что

$

sed '' file.txt


тоже работает? или нет?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4813
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: [Решено] Переменная в аргументах редактора sed

Сообщение SLEDopit »

drBatty писал(а):
24.05.2012 14:54
может вы озвучите логичное обоснование использования cat?
Я же написал выше. Хотя да, зачем читать чужие посты с обоснованиями. Проще ярлыки развешивать.
SLEDopit писал(а):
21.05.2012 13:59
Я тоже так же пишу, когда нужно какую-нибудь фигню отладить. Гораздо удобнее нажать клавишу вверх и редактировать команду sed сразу же, а не передвигаясь в середину команды. Особенно если имя файла километровое.

Поясню на пальцах. Нужно написать сложную sed конструкцию, которая с первого раза точно не заработает -> нужно без конца её исправлять. Самым логичным вариантом исправления команды было бы нажать клавишу вверх и внести изменения. Но вот незадача, имя файла чрезвычайно длинное (100 символов). Это ж сколько нужно времени и терпения, чтобы каждый раз перемещать курсор в нужную позицию?

Код: Выделить всё

sed -o -p -t -i -o -n -s 'sed_command' unbelievably_looooooooooooooooooooooooooooooooong_filename
vs

Код: Выделить всё

cat unbelievably_looooooooooooooooooooooooooooooooong_filename | sed -o -p -t -i -o -n -s 'sed_command'

зы. Если вы меня убедите, что в данной ситуации удобнее обойтись без cat'а (т.е. конструкцией указанной в первом случае), то я признаю себя нубом (:
ззы. Предложение запихнуть всю конструкцию в файл со скриптом не предлагать, это не всегда возможно/удобно/целесообразно (например, на одном из рабочих сереров у меня нет прав на создание файлов в принципе).
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [Решено] Переменная в аргументах редактора sed

Сообщение sash-kan »

SLEDopit писал(а):
24.05.2012 15:04
Если вы меня убедите, что в данной ситуации удобнее обойтись без cat'а
просто так мимо проходил и вспомнил (ничуть не пытаясь встрять в дискуссию): для навигации по словам есть ctrl+<left arrow>, ctrl+<right arrow>, M-f, M-b…
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Переменная в аргументах редактора sed

Сообщение drBatty »

SLEDopit писал(а):
24.05.2012 15:04
Но вот незадача, имя файла чрезвычайно длинное (100 символов). Это ж сколько нужно времени и терпения, чтобы каждый раз перемещать курсор в нужную позицию?

кнопка Home у вас сломалась?
SLEDopit писал(а):
24.05.2012 15:04
cat unbelievably_looooooooooooooooooooooooooooooooong_filename | sed -o -p -t -i -o -n -s 'sed_command'

угу.

Код: Выделить всё

sed -options 'command' unbelievably_looooooooooooooooooooooooooooooooong_filename

как таки сложно...
SLEDopit писал(а):
24.05.2012 15:04
Если вы меня убедите, что в данной ситуации удобнее обойтись без cat'а (т.е. конструкцией указанной в первом случае), то я признаю себя нубом (:

про бритву Оккама слышали? Cat тут лишняя сущность. Вот и всё.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [Решено] Переменная в аргументах редактора sed

Сообщение sash-kan »

SLEDopit писал(а):
24.05.2012 15:04
cat unbelievably_looooooooooooooooooooooooooooooooong_filename | sed -o -p -t -i -o -n -s 'sed_command'
и ещё, просто мимо проходя:
$ sed unbelievably_looooooooooooooooooooooooooooooooong_filename -o -p -t -i -o -n -s -e 'sed_command'
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4813
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: [Решено] Переменная в аргументах редактора sed

Сообщение SLEDopit »

drBatty писал(а):
24.05.2012 15:38
кнопка Home у вас сломалась?
sash-kan писал(а):
24.05.2012 15:35
просто так мимо проходил и вспомнил (ничуть не пытаясь встрять в дискуссию): для навигации по словам есть ctrl+<left arrow>, ctrl+<right arrow>, M-f, M-b…
Ну это лишние кнопки нажимать. Так неинтересно.
drBatty писал(а):
24.05.2012 15:38
про бритву Оккама слышали? Cat тут лишняя сущность. Вот и всё.
Слышал. Но не всегда лишняя сущность - плохо. Порой она создаётся в угоду удобству.
sash-kan писал(а):
24.05.2012 17:26
$ sed unbelievably_looooooooooooooooooooooooooooooooong_filename -o -p -t -i -o -n -s -e 'sed_command'
А вот это действительно аргумент. Убедили. Я - нуб (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [Решено] Переменная в аргументах редактора sed

Сообщение sash-kan »

SLEDopit писал(а):
24.05.2012 17:39
Убедили
да я просто мимо проходил…
вы тут сами разбирайтесь — как надо писать, а как не надо…
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Переменная в аргументах редактора sed

Сообщение drBatty »

SLEDopit писал(а):
24.05.2012 17:39
Слышал. Но не всегда лишняя сущность - плохо. Порой она создаётся в угоду удобству.

возможно вы и правы, но в данном конкретном случае нет никакого профита в прокачке файла через пайп. только лишнее время и лишняя память. да и сама по себе cat нужна для объединения файлов, а совсем не для этого.

ЗЫЖ как лично Вам писать - решать Вам. Но вот советовать неправильные команды ИМХО не нужно.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: [Решено] Переменная в аргументах редактора sed

Сообщение ZyX »

drBatty писал(а):
24.05.2012 19:43
SLEDopit писал(а):
24.05.2012 17:39
Слышал. Но не всегда лишняя сущность - плохо. Порой она создаётся в угоду удобству.

возможно вы и правы, но в данном конкретном случае нет никакого профита в прокачке файла через пайп. только лишнее время и лишняя память. да и сама по себе cat нужна для объединения файлов, а совсем не для этого.

ЗЫЖ как лично Вам писать - решать Вам. Но вот советовать неправильные команды ИМХО не нужно.

Они не «неправильные».
  • Имеет смысл иногда менять команды: в вашем варианте замена sed на grep или less более затруднена.
  • Такой подход позволяет использовать всегда один подход — {smth} | cut | grep | less. Использование в одном случае cut {file} | grep | less, а в другом cmd | cut | grep | less — просто лишнее увеличение количества необходимых знаний (я, к примеру, вообще не знал, что cut принимает файл в качестве аргумента, пока не просмотрел man на предмет допустимости моего примера).
  • Если строка состоит из нескольких команд, то уже замена имени файла проще с cat.
  • В zsh можно писать < file | cut | grep | less. Надеюсь, вы не скажете, что < нужен для объединения файлов? В этом случае «лишнее время и лишняя память» также уже не в тему.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Переменная в аргументах редактора sed

Сообщение drBatty »

ZyX писал(а):
26.05.2012 17:35
Имеет смысл иногда менять команды: в вашем варианте замена sed на grep или less более затруднена.

замена sed на grep не имеет смысла, т.к. sed это просто более мощная grep. Т.е. функционал sed'а полностью перекрывает функционал grep.
замена sed на less также не имеет смысла, но уже по иной причине: less это пейджер, и его имеет смысл использовать для просмотра результатов, т.е. добавлять _после_ sed, но никак не _вместо_. Такая замена имхо притянута за уши, ибо я не помню случая, когда мне-бы захотелось сменить sed на less.
ZyX писал(а):
26.05.2012 17:35
просто лишнее увеличение количества необходимых знаний (я, к примеру, вообще не знал, что cut принимает файл в качестве аргумента, пока не просмотрел man на предмет допустимости моего примера).

а какие из coreutils не умеют принимать аргумент в виде файла? Если уж придираться, то учтите, что формально stdin это тоже файл, и ничто другое. Использование cat переводит один файл, в другой, и уже этот другой (stdin) служит аргументом второй команды. Напрашивается ИМХО очевидный вопрос: зачем? Ну давайте сделаем ещё один fifo, откроем второй терминал, в первом будем писать, во втором - читать. Так тоже работает, и так тоже иногда оправданно. Но вопрос "зачем?" всё равно имеет место быть в 99.9% случаев.
ZyX писал(а):
26.05.2012 17:35
Если строка состоит из нескольких команд, то уже замена имени файла проще с cat.

почему?
ZyX писал(а):
26.05.2012 17:35
В zsh можно писать

пишите. Я говорил исключительно про использование cat в bash. Что там у вас в zsh - вопрос отдельного холивара.

ZyX писал(а):
22.05.2012 22:35
Сосать палец плохо, потому что
1. потом вы либо испачкаете пальцем что‐то,
2. либо занесёте инфекцию в рот.

3. пальцы нам даны совсем не для того, что-бы их сосать.
drBatty писал(а):
24.05.2012 19:43
2. только лишнее время и
1. лишняя память.
3. да и сама по себе cat нужна для объединения файлов, а совсем не для этого.

Аналогию видно?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5160
ОС: Gentoo

Re: [Решено] Переменная в аргументах редактора sed

Сообщение /dev/random »

drBatty писал(а):
27.05.2012 09:50
замена sed на grep не имеет смысла, т.к. sed это просто более мощная grep. Т.е. функционал sed'а полностью перекрывает функционал grep.

Заблуждаетесь. Попробуйте-ка реализовать на sed'е аналог grep -L.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: [Решено] Переменная в аргументах редактора sed

Сообщение ZyX »

drBatty писал(а):
27.05.2012 09:50
замена sed на grep не имеет смысла, т.к. sed это просто более мощная grep. Т.е. функционал sed'а полностью перекрывает функционал grep.
замена sed на less также не имеет смысла, но уже по иной причине: less это пейджер, и его имеет смысл использовать для просмотра результатов, т.е. добавлять _после_ sed, но никак не _вместо_. Такая замена имхо притянута за уши, ибо я не помню случая, когда мне-бы захотелось сменить sed на less.
Я не говорю о замене именно sed. Я говорю, что с таким подходом заменить последную команду легче. И не вижу причин использовать другой подход именно для sed (который я тоже вряд ли стану заменять).
drBatty писал(а):
27.05.2012 09:50
а какие из coreutils не умеют принимать аргумент в виде файла? Если уж придираться, то учтите, что формально stdin это тоже файл, и ничто другое. Использование cat переводит один файл, в другой, и уже этот другой (stdin) служит аргументом второй команды. Напрашивается ИМХО очевидный вопрос: зачем? Ну давайте сделаем ещё один fifo, откроем второй терминал, в первом будем писать, во втором - читать. Так тоже работает, и так тоже иногда оправданно. Но вопрос "зачем?" всё равно имеет место быть в 99.9% случаев.

Меня не волнует, какие из моих программ не умеют работать с именем файла, потому что они все работают без него. Что точно с ним не работает именно таким образом — xz/unxz/gzip/gunzip/bzip2/bunzip2 (я знаю про -c, -d и *cat, но это опять вопрос использования одного подхода для всех команд). На вопрос «зачем» я уже ответил — для упрощения путём унификации подхода и устранения необходимости части знаний. FIFO и второй терминал ничего не упрощают.
drBatty писал(а):
27.05.2012 09:50
ZyX писал(а):
26.05.2012 17:35
Если строка состоит из нескольких команд, то уже замена имени файла проще с cat.

почему?

<C-o>F|{edit} vs <C-o>0<C-o>2w{edit}
Используются emacs’овые сочетания + эмуляция Vim’овского <C-o>, частично написанная на zsh, частично использующая имеющуюся схему.
Со стандартной схемой это, кажется, будет <Esc>F|{edit} vs <Esc>02w{edit} — не так плохо, поэтому этот аргумент можно опустить.
drBatty писал(а):
27.05.2012 09:50
пишите. Я говорил исключительно про использование cat в bash. Что там у вас в zsh - вопрос отдельного холивара.

Даже в bash вызов cat — это копейки. Нужно экономить такты — напишите JIT-компилятор bash (лучше zsh), имеющий cat в качестве встроенной команды.
drBatty писал(а):
27.05.2012 09:50
ZyX писал(а):
22.05.2012 22:35
Сосать палец плохо, потому что
1. потом вы либо испачкаете пальцем что‐то,
2. либо занесёте инфекцию в рот.

3. пальцы нам даны совсем не для того, что-бы их сосать.

Это где такое написано? Пальцы есть для всего, для чего их можно использовать, ограничения диктуются отнюдь не мифическим «предназначением», а физической возможностью сделать что‐либо с помощью пальца и следствиями такого его использования.
drBatty писал(а):
27.05.2012 09:50
drBatty писал(а):
24.05.2012 19:43
2. только лишнее время и
1. лишняя память.
3. да и сама по себе cat нужна для объединения файлов, а совсем не для этого.

Аналогию видно?

Нет.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4813
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: [Решено] Переменная в аргументах редактора sed

Сообщение SLEDopit »

/dev/random писал(а):
27.05.2012 09:56
Попробуйте-ка реализовать на sed'е аналог grep -L.
А заодно -D и -d. Да и со всякими -C <NUM> и -m <NUM> придётся изрядно помучаться.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: [Решено] Переменная в аргументах редактора sed

Сообщение t.t »

/dev/random писал(а):
27.05.2012 09:56
drBatty писал(а):
27.05.2012 09:50
замена sed на grep не имеет смысла, т.к. sed это просто более мощная grep. Т.е. функционал sed'а полностью перекрывает функционал grep.
Заблуждаетесь. Попробуйте-ка реализовать на sed'е аналог grep -L.
От себя добавлю: по функционалу действительно во многом перекрывает (хотя и не полностью), а вот по скорости или, скажем, простоте использования -- _далеко_ не всегда. Впрочем, всё это уже оффтопик в квадрате.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: [Решено] Переменная в аргументах редактора sed

Сообщение sgfault »

SLEDopit писал(а):
27.05.2012 23:46
/dev/random писал(а):
27.05.2012 09:56
Попробуйте-ка реализовать на sed'е аналог grep -L.
А заодно -D и -d. Да и со всякими -C <NUM> и -m <NUM> придётся изрядно помучаться.

А еще '-F' :huh:
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: [Решено] Переменная в аргументах редактора sed

Сообщение ZyX »

sgfault писал(а):
01.06.2012 14:01
SLEDopit писал(а):
27.05.2012 23:46
/dev/random писал(а):
27.05.2012 09:56
Попробуйте-ка реализовать на sed'е аналог grep -L.
А заодно -D и -d. Да и со всякими -C <NUM> и -m <NUM> придётся изрядно помучаться.

А еще '-F' :huh:

Тогда уж и -P (требует сборки с поддержкой PCRE). Как ни странно, для простых выражений grep -P работает со скоростью немногим меньшей grep -F. Впрочем, grep -P до сих пор не поддерживает UTF-8.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: [Решено] Переменная в аргументах редактора sed

Сообщение t.t »

/dev/random писал(а):
27.05.2012 09:56
SLEDopit писал(а):
27.05.2012 23:46
t.t писал(а):
01.06.2012 02:13
sgfault писал(а):
01.06.2012 14:01
ZyX писал(а):
01.06.2012 21:54
Вот это я понимаю грамотный вброс. (:
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Переменная в аргументах редактора sed

Сообщение drBatty »

/dev/random писал(а):
27.05.2012 09:56
Заблуждаетесь. Попробуйте-ка реализовать на sed'е аналог grep -L.

легко. Например find+sed. Если sed-скрипт не имеет доступа к имени текущего файла, это совсем ни о чём не говорит. Да и grep -L это уж очень малоизвестное GNUтое расширение...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [Решено] Переменная в аргументах редактора sed

Сообщение drBatty »

ZyX писал(а):
27.05.2012 20:31
Меня не волнует, какие из моих программ не умеют работать с именем файла, потому что они все работают без него.

/dev/stdin это тоже имя файла. По умолчанию. Мне кажется, засовывать _все_ файлы в файл по умолчанию - плохая идея. Например потому, что например ssh (и многие другие утилиты) ждут пароль именно в /dev/stdin. Да и не только пароль. Та же read внутри скрипта читает именно /dev/stdin, и подсовывать содержимое файлов как /dev/stdin тут вряд-ли получится.
ZyX писал(а):
27.05.2012 20:31
Я не говорю о замене именно sed.

я тоже. Если вы используете конструкцию cat file1 file2 file3 | command, то команда не узнает ни имён файлов, ни даже того, что это три разных файла, а не 1 и не 10. Для sed это не очень заметно (подумаешь, опция -i и адрес $ не сработают, первая вообще в принципе, второй сработает неправильно), то вот для всяких grep -L это очень важно.
ZyX писал(а):
27.05.2012 20:31
Даже в bash вызов cat — это копейки. Нужно экономить такты — напишите JIT-компилятор bash (лучше zsh), имеющий cat в качестве встроенной команды.

я не считаю нужным использовать лишний файл (/dev/stdin) тогда, когда в этом нет необходимости.
ZyX писал(а):
27.05.2012 20:31
Пальцы есть для всего, для чего их можно использовать, ограничения диктуются отнюдь не мифическим «предназначением», а физической возможностью сделать что‐либо с помощью пальца и следствиями такого его использования.

ну и какие полезные следствия от сосания пальцев? ИМХО никаких. Сл-но это не нужно.
точно также с cat - пользы никакой, кроме притянутых за уши (типа хочу чупачупс, в магазин идти далеко, потому сосу палец). А вот вред _может_ быть, хотя в большинстве случаев, конечно, вреда от того нету.
SLEDopit писал(а):
27.05.2012 23:46
А заодно -D и -d. Да и со всякими -C <NUM> и -m <NUM> придётся изрядно помучаться.

вот и реализуйте мне всякие grep -d, D через конструкцию cat * | grep -d :-)
t.t писал(а):
01.06.2012 02:13
От себя добавлю: по функционалу действительно во многом перекрывает (хотя и не полностью), а вот по скорости или, скажем, простоте использования -- _далеко_ не всегда. Впрочем, всё это уже оффтопик в квадрате.

дык тут аргументы из серии "я не знаю, что можно писать sed '' file.txt, потому мне проще cat file.txt | sed ''!"
А по мне, использование cat file|command это использование молотка для всего (и для гвоздей, и для болтов, и для шурупов). Какая-то нелепая "унификация" ИМХО. И не надо мне говорить, что я объявил войну молоткам (команде cat)...
ZyX писал(а):
01.06.2012 21:54
требует сборки с поддержкой PCRE

sed тоже можно собрать с использованием PCRE, т.ч. опять мимо кассы.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: [Решено] Переменная в аргументах редактора sed

Сообщение sgfault »

drBatty писал(а):
04.06.2012 16:18
/dev/random писал(а):
27.05.2012 09:56
Заблуждаетесь. Попробуйте-ка реализовать на sed'е аналог grep -L.

легко. Например find+sed. Если sed-скрипт не имеет доступа к имени текущего файла, это совсем ни о чём не говорит. Да и grep -L это уж очень малоизвестное GNUтое расширение...

И реализацией этого будет

(здесь я вам предлагаю заменить пустое поле на конкретную реализацию)

А потом останется всего лишь убедить оппонентов, что использование вашего "произведения" проще, понятнее, да и работает быстрее, чем `grep -L`.
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: [Решено] Переменная в аргументах редактора sed

Сообщение ZyX »

drBatty писал(а):
04.06.2012 16:48
ZyX писал(а):
27.05.2012 20:31
Меня не волнует, какие из моих программ не умеют работать с именем файла, потому что они все работают без него.

/dev/stdin это тоже имя файла. По умолчанию. Мне кажется, засовывать _все_ файлы в файл по умолчанию - плохая идея. Например потому, что например ssh (и многие другие утилиты) ждут пароль именно в /dev/stdin. Да и не только пароль. Та же read внутри скрипта читает именно /dev/stdin, и подсовывать содержимое файлов как /dev/stdin тут вряд-ли получится.

? Обычно никто не открывает /dev/stdin прямо, а используют уже имеющиеся дескрипторы. И я вообще не слишком понял, к чему это.
drBatty писал(а):
04.06.2012 16:48
я тоже. Если вы используете конструкцию cat file1 file2 file3 | command, то команда не узнает ни имён файлов, ни даже того, что это три разных файла, а не 1 и не 10. Для sed это не очень заметно (подумаешь, опция -i и адрес $ не сработают, первая вообще в принципе, второй сработает неправильно), то вот для всяких grep -L это очень важно.

Поэтому grep, sed и perl — одни из немногих утилит, про которые я точно знаю, что они принимают имя файла. Здесь, конечно, cat не катит, но прочие команды (тот же cut) не делают никакой разницы между cat *|cmd и cmd *, так зачем про них знать больше?
drBatty писал(а):
04.06.2012 16:48
я не считаю нужным использовать лишний файл (/dev/stdin) тогда, когда в этом нет необходимости.


drBatty писал(а):
04.06.2012 16:48
ну и какие полезные следствия от сосания пальцев? ИМХО никаких. Сл-но это не нужно.
точно также с cat - пользы никакой, кроме притянутых за уши (типа хочу чупачупс, в магазин идти далеко, потому сосу палец). А вот вред _может_ быть, хотя в большинстве случаев, конечно, вреда от того нету.

Чупа‐чупс пальцем не заменяется. А вещи, которые здесь обсуждаются, полностью взаимозаменяемы при большинстве условий использования.
drBatty писал(а):
04.06.2012 16:48
SLEDopit писал(а):
27.05.2012 23:46
А заодно -D и -d. Да и со всякими -C <NUM> и -m <NUM> придётся изрядно помучаться.

вот и реализуйте мне всякие grep -d, D через конструкцию cat * | grep -d :-)
t.t писал(а):
01.06.2012 02:13
От себя добавлю: по функционалу действительно во многом перекрывает (хотя и не полностью), а вот по скорости или, скажем, простоте использования -- _далеко_ не всегда. Впрочем, всё это уже оффтопик в квадрате.

дык тут аргументы из серии "я не знаю, что можно писать sed '' file.txt, потому мне проще cat file.txt | sed ''!"
А по мне, использование cat file|command это использование молотка для всего (и для гвоздей, и для болтов, и для шурупов). Какая-то нелепая "унификация" ИМХО. И не надо мне говорить, что я объявил войну молоткам (команде cat)...

Нет, не для всего. Нам надо сделать операцию над содержимым файла(ов) (нас не интересует ничего, кроме содержимого) — используем cat. Надо над самими файлами (т.е. над содержимым, его именем и/или местом физического расположения) — не используем cat.

Есть ещё одна вещь: less file.html против cat file.html | less. Мне совершенно неохота знать, каким ключом отключается его текущее поведение (и каким включается обратно когда понадобиться).
drBatty писал(а):
04.06.2012 16:48
ZyX писал(а):
01.06.2012 21:54
требует сборки с поддержкой PCRE

sed тоже можно собрать с использованием PCRE, т.ч. опять мимо кассы.

Где? Я только нашёл жутко устаревший ssed.
Спасибо сказали: