Как проверить строку в строке с помощью оператора if?

Я ожидаю, что результат будет ниже

$ ./test.sh Manifest.txt test/directory1/dir2/Main test/directory1/dir2/Main contains Main test/directory1/dir2/Main have string Main directory2/dir3 directory2/dir3 dont have string Main 

Я использую скрипт, как показано ниже.

 #!/usr/bin/ksh while IFS='' read -r line || [[ -n "$line" ]]; do for project in $line do echo $project if [[ "$project" =~ ^(Main)$ ]]; then echo "$project contain Main" exit 1 else echo "$project dont have Main" fi done done < "$1" 

Но это не возвращает ожидаемый результат.

Что дает результат как

 test/directory1/dir2/Main test/directory1/dir2/Main dont have Main dir2/dir3 dir2/dir3 dont have Main 

One Solution collect form web for “Как проверить строку в строке с помощью оператора if?”

Регулярное выражение ^(Main)$ будет сопоставлено с полной строкой в $project . Кажется, это путь. Проблема в том, что если $project является именно Main , сравнение не удастся. Это связано с тем, что выражение привязано как к началу, так и к концу строки.

Я считаю, что простое изменение выражения на Main$ будет разобраться в нем. Это будет соответствовать Main в конце строки в $project .

  • Обрезать последние символы из строки
  • Строки - Извлечь версию файла Рекурсивный
  • Проблема с sed в массиве, содержащем строки, содержащие пробелы
  • Строки соответствия, начинающиеся с одного шаблона в двух текстовых файлах
  • Изменение вхождения строки в файл при соблюдении новых строк строки DOS
  • Удалить последний символ из строки, захваченной с помощью awk
  • sed для замены совпадающего слова на конец строки
  • Как извлечь дату и рассчитать, находится ли она в течение «х» дней с сегодняшнего дня?
  • Проверьте, содержит ли строка строку подстроки
  • Что означает ** / * (D.) В аргументах (zsh) sed?
  • Как вставить содержимое файла в строку в bash
  • Linux и Unix - лучшая ОС в мире.