grep: найти большую строку в маленькой строке

Я пишу небольшой скрипт для получения входных данных и сопоставления с текстовым файлом.

Тем не менее, ввод будет более крупной строкой, чем строка в файле, с которой я хочу сопоставить.

Пользовательский ввод:

abc-de-ef-gh1 

Текст в файле:

 This is test,-de-ef-gh,This is test 

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

Как мне этого добиться? Я не мог сделать это с grep.

У вас есть файл с шаблонами. grep может читать шаблоны с помощью опции -f . Если вы хотите проверить, соответствует ли строка $input шаблону в patterns.txt , вы можете сделать

 printf '%s\n' "$input" | if grep -q -f patterns.txt; then echo 'matches' else echo 'does not match' fi 

Это запустит grep над содержимым строки с шаблонами в patterns.txt . В bash вы можете вместо этого использовать здесь-строку:

 if grep -q -f patterns.txt <<<"$input"; then echo 'matches' else echo 'does not match' fi 

-q останавливает grep для вывода (нас интересует только состояние выхода).

Если шаблоны представляют собой фиксированные строки (не регулярные выражения), используйте -F с grep в дополнение к другим флагам ( grep -qF -f ... ).

Используя bash , cut и grep :

 read -p "Hey user, input something: " $n printf "Match " grep -m 1 -q -f <(cut -d, -f2 file) <<< "$n" || printf "not " printf "found.\n" 

Заметки:

  • Невозможно найти более длинную строку в более короткой, но на самом деле нужно выяснить, соответствуют ли более короткие строки в файле более длинной строке.
  • cut используется для извлечения среднего поля из файла
  • grep ищет это среднее поле в строке ввода пользователя.
  • printf предоставляет некоторые отзывы.