1

Мне нужно искать в папке файлов и копировать весь текст, который начинается с переменной.

Так, например:

Файлы A.txt, B.txt, C.txt и D.txt содержат строки "Hello1", "Hello2", "Hello3" и "Hello4" соответственно. Мне нужно иметь возможность искать все слова, которые начинаются с "Hello", и выводить результат.

В этом конкретном случае будут выполняться поиск по A.txt, B.txt, C.txt и D.txt и вывод будет

Hello1
Hello2
Hello3
Hello4

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

grep -l Hello *.txt

2 ответа2

3

Вы, вероятно, хотите grep -ohw 'Hello[0-9]*' *.txt .

  • -o выводит только совпадающую часть строки
  • -h заставляет grep подавлять вывод имени файла
  • -w заставляет grep искать только целые слова, поэтому Hello1Hello2 не будет совпадать (хотя оно будет совпадать дважды без -w )

Вам нужно настроить шаблон, так как литерал Hello будет соответствовать только Hello а затем просто выводить его. Поскольку вы хотите сопоставить Hello1 Hello5 (или даже Hello123), вам нужно несколько цифр ([0-9]*).

Не забудьте процитировать шаблон, чтобы * не расширялась оболочкой.

0

Это ищет слова, начинающиеся с переменной.

var=Hello
grep -ho "\\<${var}[^[:blank:]]*" *.txt

grep \< является якорем "начала слова".

Я предполагаю, что ваши слова разделены пробелом, поэтому остальная часть слова является непустыми символами. Вы можете достаточно легко изменить это на числа ([0-9]*) или "словесные символы", похожие на perl ([[:alnum:]_]*).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .