LINUX.ORG.RU

Греп

 , ,


0

1

Как вставить в include опцию грепа текстовый файл, иными словами, передавать последовательное ему строку за строкой файла как опцию include грепа?



Последнее исправление: allene533 (всего исправлений: 2)
Ответ на: комментарий от Zhbert

т.е в качестве содержимого include опции хочу задать не строку а текстовый файл

allene533
() автор топика

можно попробовать сделать просто

 a=`cat 2.txt`

grep blabla --include=$a  ....

если перечисление в файле будет идти в одну строку через пробел

monkdt
()
Ответ на: комментарий от alex1101

хочу вместо

сделать так

grep "что-то написано" --include=/текстовый/файл/со/списком /путь/где/искать
allene533
() автор топика
Ответ на: комментарий от undef

А разве последовательно передавать строки из файла в include опцию нельзя?

allene533
() автор топика
Ответ на: комментарий от undef
       -f FILE, --file=FILE
              Obtain patterns from FILE, one per line.  If this option is used multiple times or is combined  with  the  -e
              (--regexp)  option,  search  for  all  patterns  given.  The empty file contains zero patterns, and therefore
              matches nothing.

Не оно?

iron ★★★★★
()
Ответ на: комментарий от iron

этот вариант с f предполагает поиск текста из файла внутри файлов

allene533
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

А где это посмотреть - все прогуглил и не нашел.

allene533
() автор топика
Ответ на: комментарий от undef

Спасибо, здорово, только- не сочти меня придирчивым, хотелось однострочным способом - ну если однострочным нельзя буду так.

allene533
() автор топика
Ответ на: комментарий от monkdt

Спасибо вроде так пробовал grep «smthing» –include=$(/path/to/txtfile) не сработало, надеюсь твой вариант сработает

allene533
() автор топика
Ответ на: комментарий от allene533

Тащем-то подобные портянки можно и в одну строчку: for i in $(cat include.file); do grep bla-bla; done.

undef ★★★
()
Ответ на: комментарий от allene533

Так, как ты написал, и не могло сработать: надо не

$(/path/to/txtfile)

а

«$(cat /path/to/txtfile)»

(кавычки в этом контексте обязательны).
Но если у тебя на самом деле большой файл, то можешь нарваться на «командная строка слишком длинна».

ABW ★★★★★
()
5 декабря 2023 г.

По -видимому такое невозможно

grep -rl --include={$(sed 's/\ /,/g' <<< $(basename -a $(grep -Eo 'ht+ps*:/+[[:graph:]]+' /путь/к/файлу)))} '' /путь/к/файлу
echo $?
1
или
a=$(sed 's/\ /,/g' <<< $(basename -a $(grep -Eo 'ht+ps*:/+[[:graph:]]+' /путь/к/файлу)))
grep -rl --include={$a} '' /путь/к/файлу
echo $?
1

Содержимое переменной $a
file1.ext,file2.ext,...,fileN.ext
Странно другое 
grep -rl --include={file1.ext,file2.ext,...,fileN.ext} '' /media/mint/ # а так работает как ни странно.
echo $?
0

P.S символ многоточие(…) к коду отношение не имеет в данном случае это мой символ чтобы не перегружать листинг Никто не знает как исправить положение ?

allene533
() автор топика
Ответ на: комментарий от allene533

В цикле читай текстовик строчка за строчкой и грепай по этим словам.

То есть если у тебя в файле написано

cat
dog
shark

То сперва натрави на слово cat, потом dog, потом shark. Для чего используй такую вещь, как цикл.

Зачем ты весь файл целиком в переменную впихиваешь?

Vsevolod-linuxoid ★★★★★
()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

Я где-то читал что с for получается очень медленно.

Зачем ты весь файл целиком в переменную впихиваешь? Чтобы не использовать цикл (см выше). А разве так нельзя странно что если файлы целиком пихаю все работает

allene533
() автор топика
Ответ на: комментарий от allene533

Ну если у тебя очень очень много, то медленно. Но bash вообще не про скорость, на C тогда пиши.

Vsevolod-linuxoid ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.
Тема будет перемещена в архив .