grep, цифры и $() (не могу заставить работать)

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

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
AlexYeCu
Сообщения: 1137
ОС: fedora

grep, цифры и $()

Сообщение AlexYeCu »

Как исправить, чтобы в ответ на это:

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

$(cat ~/somefile | grep 3-33-33)


не получить это:

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

bash: 3-33-33: команда не найдена
?
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: grep, цифры и $()

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

А чего Вы хотите добиться? Сейчас происходит выполнение строки с найденным текстом как команды, на что bash и ругается.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: grep, цифры и $()

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

AlexYeCu писал(а):
18.04.2011 15:55
Как исправить, чтобы в ответ на это:

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

$(cat ~/somefile | grep 3-33-33)


не получить это:

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

bash: 3-33-33: команда не найдена
?

А что вы пытаетесь сделать?

Разбираю по частям.
1) cat читает файл и передаёт его grep'у
2) grep находит в полученном потоке строки, содержащие 3-33-33. По-видимому, в нём имеется строка, которая не просто содержит эти числа, а целиком из них состоит. Найденные строки передаются конструкции $().
3) Конструкция $() подставляет найденные строки в командную строку. Поскольку перед $() нет ничего, командная строка будет состоять только из этих строк. Т.е. если были найдены строки "3-33-33" и "foo 3-33-33 bar", то будет выполнена команда "3-33-33 foo 3-33-33 bar".
4) поскольку команды 3-33-33 не существует, выдаётся ошибка.

Т.е. эта конструкция и должна вести себя так, как ведёт, а что вы _хотели_ сделать - совершенно не очевидно.

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

Re: grep, цифры и $()

Сообщение drBatty »

AlexYeCu писал(а):
18.04.2011 15:55
Как исправить, чтобы в ответ на это:

Код
$(cat ~/somefile | grep 3-33-33)


не получить это:


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

$ ( cat ~/somefile | grep 3-33-33 )
3-33-33


[telepate mode on]
доллар здесь - приглашение командной строки
[telepate mode off]
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

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

Re: grep, цифры и $()

Сообщение SLEDopit »

drBatty писал(а):
18.04.2011 17:12
доллар здесь - приглашение командной строки
а subshell зачем? (:
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.
Спасибо сказали:
Аватара пользователя
AlexYeCu
Сообщения: 1137
ОС: fedora

Re: grep, цифры и $()

Сообщение AlexYeCu »

Отвечаю всем сразу.
Мне надо, чтобы:

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

$(cat ~/somefile | grep 3-33-33)

работало также, как и

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

cat ~/somefile | grep 3-33-33

Т.е. в скрипте есть строка вида

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

vara=$(cat ~/somefile | grep $varb)

Её надо привести к правильному виду, чтобы varb не считалось командой.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: grep, цифры и $()

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

AlexYeCu писал(а):
18.04.2011 17:53
Т.е. в скрипте есть строка вида

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

vara=$(cat ~/somefile | grep $varb)

Её надо привести к правильному виду, чтобы varb не считалось командой.

Она и так правильная. Неправильной она была, когда не было "vara=". Те же проблемы могут появиться, если после знака равенства следует пробел.

AlexYeCu писал(а):
18.04.2011 17:53
чтобы varb не считалось командой.

Оно и не считалось. В первоначальном варианте (без "vara=") командой считался текст, возвращаемый grep'ом, а вовсе не varb.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: grep, цифры и $()

Сообщение SLEDopit »

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

 $ echo -e "test\ntest2" > 1
 $ varb=$((1+1)) ; vara="$(cat 1|grep $varb)" ; echo $vara
test2
в чем проблема?

зы. опередили (:
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.
Спасибо сказали:
Аватара пользователя
AlexYeCu
Сообщения: 1137
ОС: fedora

Re: grep, цифры и $()

Сообщение AlexYeCu »

Так, вопрос снимается, это заскоки Zenity.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: grep, цифры и $()

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

AlexYeCu писал(а):
18.04.2011 18:20
Так, вопрос снимается, это заскоки Zenity.

o_O Фигасе. А zenity-то тут каким боком?
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: grep, цифры и $()

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

/dev/random писал(а):
18.04.2011 18:24
AlexYeCu писал(а):
18.04.2011 18:20
Так, вопрос снимается, это заскоки Zenity.

o_O Фигасе. А zenity-то тут каким боком?

Всего лишь ещё один штрих в этой абстракции. (:
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: