Скриптинг — Выражение Grep Со Специальными Именами Файлов.

  • Автор темы Hozbas
  • Обновлено
  • 20, Oct 2024
  • #1

Мне приходится просматривать некоторые обычные файлы в каталогах и находить те файлы, которые имеют в своем содержимом собственное имя.

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

Что действительно правильно, так это $something:q — это массив путей, по которым мне нужно найти файлы.

 /home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/!_1
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/dam/$user/:e/'/-r
/home/OS/pocitacove/testovaci_adresar/z/test3/skusime/ taketo/   taketo
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/.a=b
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/@
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/:
/home/OS/pocitacove/testovaci_adresar/z/test4.pre_expertov/.-bla/.-bla/'ano'

foreach paths ($something:q)

set name = "$paths:t"

@ number = (`grep -Ec "$name" "$paths"`)

if ($number != 0) then

echo -n "$paths "

echo $number

endif

@ number = 0
end
 

Следующая переменная — name, в которой содержится только имя текущего файла.

Hozbas


Рег
18 Oct, 2010

Тем
74

Постов
182

Баллов
582
  • 25, Oct 2024
  • #2

Если я вас правильно понимаю, ваша проблема в том, что имена ваших файлов интерпретируются как метасимволы регулярных выражений. В этом случае вы хотите, чтобы

 -E 
switch to - (который указан в POSIX). Это говорит grep to interpret its pattern as a fixed string rather than a regex:

--

Обратите также внимание на добавление @ number = (`grep -Fc -- "$name" "$paths"`) to specify "end of options" to grep чтобы обойти имена файлов, начинающиеся с grep . Note also that the -F переключатель, который включает расширенные регулярные выражения, больше не нужен.

 

Татьяна Апостол


Рег
29 Oct, 2020

Тем
83

Постов
186

Баллов
621
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно