2013-10-26 3 views
1

Я настоящий начинающий сценарий csh/tcsh, и поэтому мне нужна ваша помощь. Проблема в том, что мне приходится проходить через обычные файлы в каталогах и находить те файлы, которые имеют собственное имя в своем контенте. В следующем фрагменте сценария есть цикл, в котором я просматриваю пути и используя grep, чтобы найти имя файла в его содержимом. Что, безусловно, верно, это что-то: q - это массив путей, где мне нужно найти файлы. Следующая переменная - это имя, в котором указано только имя текущего файла. например: /home/computer/text.txt (пути) и: text.txt (name) И моя самая большая проблема - найти имена файлов в их содержимом. Мне довольно сложно написать правильный grep для этого, потому что имена файлов и каталогов, которые я просматриваю, безумны. Вот некоторые из них:Выражение Grep со специальными именами файлов

/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 
+0

Непонятно мне, если ваш 'grep' предназначен для просмотра всех перечисленных файлов или просто просмотрите список имен файлов для нескольких совпадений. Если вы просматриваете список имен, затем записывайте список в файл, поэтому вам не нужно беспокоиться об экранировании метамарков, которые в настоящее время находятся в переменной $ path. Кроме того, '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. – shellter

+0

В любом случае, я хочу сказать, что у вас может быть indvidual cmd, например 'grep '' ano '" "$ paths". Таким образом, вам придется сканировать каждое значение, присвоенное '$ name', и избегать метакаров в оболочках или регулярных выражениях. Вряд ли кто-нибудь сможет сделать эту работу отлично на любом языке оболочки. Поэтому рекомендуем вам отступить и посмотреть другие варианты. 'perl' разработан с учетом такого безумия, но добраться до этого уровня - это высокая кривая обучения. Возможно, другие будут комментировать возможные «python» или другие языки для этой задачи. Удачи. – shellter

+0

Я могу использовать только csh/tcsh для этого проекта. и я должен заглянуть внутрь файлов, просматривая их содержимое и поиская имя текущего файла в его содержимом. – user2919185

ответ

0

Вы пробовали с Grep -F, она принимает входные быть строковые литералы и не беспокоиться о экранирующих символов.

 Смежные вопросы

  • Нет связанных вопросов^_^