LinuxForum.Fans
Тема

Grep обратный поиск

Автор: Asus_ROG 19 сообщений 6235 просмотров
#275656

Добрый вечер!

Стоит такая задача, есть файл 1.txt в нем текст hello hello dlrow. Хочу чтобы при помощи grep терминал вывел слово world. То есть как заставить grep искать файлы справа налево, и для поиска зеркальных слов. Пробовал добавлять grep|rev, но как вы видите ниже вывелось только world olleh olleh, а мне нужно чтобы при вводе вышло только слово world. Пожалуйста помогите решить данную проблему. Заранее спасибо!

grep |rev "world" 1.txt
rev: world: No such file or directory
world olleh olleh
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.

P.S.
Прошу простить, если я ошибся веткой, знаю что тут решают более сложные проблемы, но в нете ничего толкового про это не нашел(

#275659

Согласно man grep, эта команда ищет строки, т.е. чтобы вывести отдельное слово только её возможностей будет недостаточно.

#275660
Lupo Alberto написал:
Согласно man grep, эта команда ищет строки, т.е. чтобы вывести отдельное слово только её возможностей будет недостаточно.

Значит в одну строку это невозможно реализовать, спрашивал у тьютора, он сказал что это делается примерно так же в одной строке: grep '^a' 'words.txt' (вывести из файла «words.txt» все строки, начинающиеся с буквы «a»:). Уже 4 часа потратил на это нигде нет похожих примеров.

К слову man grep тоже особо, не помогла
man grap "world" 1.txt
No manual entry for grap
No manual entry for world
No manual entry for 1.txt

Еще раз спасибо!

#275665
"Asus_ROG" написал:
grep '^a' 'words.txt' (вывести из файла «words.txt» все строки, начинающиеся с буквы «a»:

Все строки, но не отдельное слово.
man grep — подразумевалось руководство по команде grep.
P.S. Приведите дословно, как звучит задание.

#275668
"Asus_ROG" написал:
text
man grap "world" 1.txt
No manual entry for grap
No manual entry for world
No manual entry for 1.txt

А почему вы уверены, что man знает команду grap, слово world и ваш файл 1.txt?
UPD: Lupo Alberto, вы меня опередили :)

#275669

Может это имелось ввиду:
[console]$ cat 1.txt
abra cadabra
прсто строка
hello hello dlrow
$ grep dlrow 1.txt | rev
world olleh olleh[/console]

ЗЫ. А, не... нужно только первое слово...

#275671

Вот само задание: search the content of file for random specified string (search should be performed in both directions)

Как показал тьютор, нужно ввести в файл любые слова, но чтобы одно слово было зеркальным (apple elppa), сказал что нужно ввести команду grep и ввести слово apple, и чтобы в аутпуте вышло только apple.
-=Serj=-
Тоже самое у меня вышло первом посте world olleh olleh, но тьютор сказал так нельзя, нужно чтобы вышло только world.

#275672
yars написал:
[quote="Asus_ROG"]
text
man grap "world" 1.txt
No manual entry for grap
No manual entry for world
No manual entry for 1.txt

А почему вы уверены, что man знает команду grap, слово world и ваш файл 1.txt?
UPD: Lupo Alberto, вы меня опередили :)[/quote]
Ну я думал что man это как префикс типа ls -a и т.д.

#275674
"Asus_ROG" написал:
search the content of file for random specified string (search should be performed in both directions)

«Поиск по содержимому файла для случайно указанной строки (поиск должен осуществляться в обоих направлениях».
IMHO, звучит несколько иначе, чем...

"Asus_ROG" написал:
Как показал тьютор, нужно ввести в файл любые слова, но чтобы одно слово было зеркальным (apple elppa), сказал что нужно ввести команду grep и ввести слово apple, и чтобы в аутпуте вышло только apple.
#275678

[console]$ rev 1.txt | grep -o world[/console]

#275679
Lupo Alberto написал:
[quote="Asus_ROG"]search the content of file for random specified string (search should be performed in both directions)

«Поиск по содержимому файла для случайно указанной строки (поиск должен осуществляться в обоих направлениях».
IMHO, звучит несколько иначе, чем...

"Asus_ROG" написал:
Как показал тьютор, нужно ввести в файл любые слова, но чтобы одно слово было зеркальным (apple elppa), сказал что нужно ввести команду grep и ввести слово apple, и чтобы в аутпуте вышло только apple.
[/quote]
Ну не знаю мне тьютор лично сказал как должно все получиться, но не сказал как все это реализовать, по-его словам единственный и верный способ это grep, но я ничего не нашел. Неужели нельзя что нибудь сделать в данном случае?
#275681

Может, всё же задание звучит так: найти в файле строки, содержащие «зеркальное» отображение шаблона?
Точнее, так его понимает преподаватель.

#275688
Lupo Alberto написал:
Может, всё же задание звучит так: найти в файле строки, содержащие «зеркальное» отображение шаблона?
Точнее, так его понимает преподаватель.

Нет, он на доске написал, что допустим в файле есть текст hello hello hello hello dlrow. При помощи grep надо найти в нем слово world и чтобы при выводе вышло только world, а не world olleh olleh olleh, получается что на уровне grep такого сделать не получится, пожалуйста помогите.

#275694
-=Serj=- написал:
Не, а этот вариант-то попробовали - Grep обратный пойск ?

Спасибо, помогло! То что и хотелось.
grep |rev "world" 1.txt, блин конечно изначально и не так близок был :(

[asus@mgt1 test]$ ls
1.txt
[asus@mgt1 test]$ tee<1.txt
hello hello dlrow
[asus@mgt1 test]$ rev 1.txt | grep -o world
world
[asus@mgt1 test]$

#276406

Еще раз извиняюсь, а если у меня тот же файл 1.txt и в нем текст hello hello dlrow world, как сделать так чтобы grep вывел только world и dlrow, попробовал комманду grep -e "world\|dlrow" 1.txt, но вышла вся строка (hello hello dlrow world), так же пытался сделать так grep 1.txt "world&dlrow" 1.txt результата не дало. Спасибо!

#276440

[console]$ grep -o "world\|dlrow" 1.txt[/console]
или
[console]$ grep -Eo "world|dlrow" 1.txt[/console]
или
[console]$ egrep -o "world|dlrow" 1.txt[/console]

#276488

-=Serj=-
Спасибо!

#277326
"Asus_ROG" написал:
Нет, он на доске написал, что допустим в файле есть текст hello hello hello hello dlrow. При помощи grep надо найти в нем слово world и чтобы при выводе вышло только world, а не world olleh olleh olleh, получается что на уровне grep такого сделать не получится, пожалуйста помогите.
text
echo "hello hello hello hello dlrow" | rev | grep -o 'world'
1:world
Войдите или зарегистрируйтесь, чтобы ответить.