Выведите переменную и затем grep, чтобы увидеть, существует ли значение в файле и ничего не возвращает. Unix Shell Scripting

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

У меня есть мой код, который это:

 MyFiles="MyFile-I-20160606_141_Employees.txt"
 DirFiles="/dev/fs/C/Users/salasfri/Desktop/MyFiles.txt"
 for OutFile in $(cat $DirFiles); do
    if [[ $( echo $MyFiles | grep -c $OutFile ) -gt 0 ]]; then
       print "The file $OutFile exist!!"
    fi
 done

и файл в /dev/fs/C/Users/salasfri/Desktop/MyFiles.txt содержит следующие значения:

MyFile-I-*_141_Employees.txt
MyFile-I-*_141_Products.txt
MyFile-I-*_141_Deparments.txt

Идея состоит в том, чтобы проверить, найдена ли переменная "MyFiles" в файле MyFiles.txt, как вы можете видеть, используя шаблон "*", так как это дата, она изменится.

что решения не возвращают никакого количества файлов, я что-то не так делаю?

2 ответа

Вы можете попробовать изменить строку поиска перед поиском.
Пример с тремя тестовыми строками:

for teststring in MyFile-I-20160606_141_Employees.txt MyFile-I-20160606_142_Employees.txt MyFile-I-20160606_141_Others.txt
do
   grepstr=$(sed 's/[0-9]\{8\}_/*_/' <<< "${teststring}")
   fgrep "${grepstr}" "${DirFiles}"
   found=$(fgrep "${grepstr}" "${DirFiles}")
   if [ $? -eq 0 ]; then
      echo "${found} matches ${teststring}."
   fi
done

В вашем случае вы можете сделать код короче с

   fgrep -q "$(sed 's/[0-9]\{8\}_/*_/' <<< "${MyFiles}")" $DirFiles &&
       echo "The file $(sed 's/[0-9]\{8\}_/*_/' <<< "${MyFiles}") exist!!"

Ваши шаблоны - это шаблоны в стиле глобуса, а не регулярные выражения. Шаблон abc-*_X.txt не будет соответствовать строке abc-1234_X.txt,

Вы хотите использовать конструкцию оболочки, которая выполняет сопоставление глобуса.

MyFiles="MyFile-I-20160606_141_Employees.txt"

sed 's/\r$//' "/dev/fs/C/Users/salasfri/Desktop/MyFiles.txt" \
| while IFS= read -r Pattern; do
    if [[ $MyFiles == $Pattern ]]; then
        print "$MyFiles matches pattern $Pattern"
        break
    fi
done 
Другие вопросы по тегам