Проверка наличия слова или фразы в файле [Bash]

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

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

Аватара пользователя
Babusha
Сообщения: 203
ОС: Убунту

Проверка наличия слова или фразы в файле [Bash]

Сообщение Babusha »

Как проверить наличие слова в файле в баше?
И как мне реализовать что бы, если к примеру, строка будет в файле, выполнялось

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

echo "Эта строка есть в файле"

А если ее не будет, то выполнялось

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

echo "Этой строки нету в файле"


Я не знаю как это реализовать, гугл не помог. Все что дальше делать я знаю:

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

if [  ]; then
echo "Эта строка есть в файле"
else
echo "Этой строки нету в файле"
fi
Спасибо сказали:
Аватара пользователя
broom
Бывший модератор
Сообщения: 1629
Статус: мизантроп.ка
ОС: Gentoo

Re: Проверка наличия слова или фразы в файле [Bash]

Сообщение broom »

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

grep "строка" <имя файла> && echo "Эта строка есть в файле" || echo "Этой строки нет в файле"

или то же самое:

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

if grep "строка" <имя файла>; then
echo "Эта строка есть в файле"
else
echo "Этой строки нету в файле"
fi
but in the darkness, behind your smile, you scream... © Dio
Спасибо сказали:
Аватара пользователя
Babusha
Сообщения: 203
ОС: Убунту

Re: Проверка наличия слова или фразы в файле [Bash]

Сообщение Babusha »

Спасибо большое, все работает!

А еще вопрос,

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

if grep "test" ./test; then
# Нужно стереть эту строку
else
echo "Этой строки нету в файле"
fi


Как стереть строку?
Спасибо сказали:
Аватара пользователя
broom
Бывший модератор
Сообщения: 1629
Статус: мизантроп.ка
ОС: Gentoo

Re: Проверка наличия слова или фразы в файле [Bash]

Сообщение broom »

Ещё можно, чтобы grep лишний раз не выводил найденную строку, передать ему параметр "-q".
but in the darkness, behind your smile, you scream... © Dio
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Проверка наличия слова или фразы в файле [Bash]

Сообщение SLEDopit »

Babusha писал(а):
16.06.2010 15:49
Как стереть строку?
зачем так сложно? if'ы, условия?
можно просто

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

sed -i '/ваша строка/d' список_файлов_или_просто_маска_по_име*
если строка встретится, то она удалится, если нет - то никаких изменений не произойдет.
broom писал(а):
16.06.2010 15:49
Ещё можно, чтобы grep лишний раз не выводил найденную строку, передать ему параметр "-q".
для поиска грепом, имхо, лучше пользоваться -l. тогда получаем на выходе список файлов и делаем с ним что хотим.
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.
Спасибо сказали:
Аватара пользователя
Babusha
Сообщения: 203
ОС: Убунту

Re: Проверка наличия слова или фразы в файле [Bash]

Сообщение Babusha »

зачем так сложно? if'ы, условия?


Нет, мне нужно именно с If.
Можете показать, как сделать именно с if ?
Спасибо сказали:
Аватара пользователя
broom
Бывший модератор
Сообщения: 1629
Статус: мизантроп.ка
ОС: Gentoo

Re: Проверка наличия слова или фразы в файле [Bash]

Сообщение broom »

Всё равно то же самое.

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

if grep "test" ./test; then
sed -i '/ваша строка/d' ./test
echo "Теперь этой строки в файле нет"
else
echo "Этой строки нету в файле"
fi

but in the darkness, behind your smile, you scream... © Dio
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Проверка наличия слова или фразы в файле [Bash]

Сообщение SLEDopit »

Babusha писал(а):
16.06.2010 16:07
Нет, мне нужно именно с If.
дз что ли? (:
Babusha писал(а):
16.06.2010 16:07
Можете показать, как сделать именно с if ?

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

grep -q string file && sed -i '/string/d' file || echo No such string
что равносильно

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

if grep -q string file
then
sed -i '/string/d' file
else
echo No such string
fi
зы опоздал (:
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.
Спасибо сказали:
Аватара пользователя
Babusha
Сообщения: 203
ОС: Убунту

Re: Проверка наличия слова или фразы в файле [Bash]

Сообщение Babusha »

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

Re: Проверка наличия слова или фразы в файле [Bash]

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

SLEDopit писал(а):
16.06.2010 16:05
broom писал(а):
16.06.2010 15:49
Ещё можно, чтобы grep лишний раз не выводил найденную строку, передать ему параметр "-q".
для поиска грепом, имхо, лучше пользоваться -l. тогда получаем на выходе список файлов и делаем с ним что хотим.
Ну, -q и -l это просто разые случаи применения. Конечно, вместо for i in *; do grep -q text $i && do_someth $i; done удобнее grep -l text * | xargs do_someth. А для единичного действия удобнее -q.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Проверка наличия слова или фразы в файле [Bash]

Сообщение drBatty »

а вот пример полностью на sed (а что мелочиться?)

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

#!/bin/sed -rf

/bash/{
        s/.*/строка '&' стёрта/w /dev/stderr
        h
        d
}

${
        x
        /^$/s/.*/в файле не было такого слова/w /dev/stderr
        x
}



t.t писал(а):
16.06.2010 18:04
Ну, -q и -l это просто разые случаи применения. Конечно, вместо for i in *; do grep -q text $i && do_someth $i; done удобнее grep -l text * | xargs do_someth. А для единичного действия удобнее -q.

...а если вы всё равно используете sed, то можно заменить обе команды, и grep -l, и grep -q

например grep -q "XYZ"
это будет

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

sed '/XYZ/q;$q77'
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: