Intereting Posts
Как я могу запустить сценарий рекурсивно в каталоге Работает ли Maru OS на Nexus 5 с адаптером Slimport Интервал обновления ldap netgroup в SSSD Как я могу настроить переименование подкастов после их загрузки с помощью gPodder? Объединить две таблицы на основе значения в первом столбце Как изменить перенаправление вывода текущего процесса? Внедряет ли реализация Android MAC-сервера SELinux корневые приложения с привилегиями root от доступа к данным приложения? Почему не ssh.service, а sshd.service? Почему большая часть диска io связана с jbd2, а не с процессом, который фактически использует io? Обработка абзацев в файлах unix Можете ли вы использовать команды blacklist через SSH? curl download отлично работает, но wget не работает с помощью ssl Как установить программное обеспечение на Red Hat? Почему значение VSIZE в верхней части отличается от значения VSZ (размер виртуального набора) в ps? равное сравнение по переменной jq

Поиск нескольких вхождений определенного символа в tcsh

Я пытаюсь найти количество определенных типов файлов, которые имеют «_» в имени файла.

Я большой новичок, поэтому мой синтаксис выглядит в данный момент;

foreach txt ( 'ls *.txt') set n=0 if(grep _ txt) then @ n = n+1 endif end 

Это не работает, так как мой оператор if неверен, но я не уверен, как определить, если txt-файл имеет «_» в имени файла, а затем увеличивайте n на 1.

Один из способов сделать это – использовать возможности globbing оболочки, а не использовать grep.

 set n=0 foreach txt (*_*.txt) @ n++ end 

Синтаксис для «if grep», если вам нужно, по другим причинам:

 if ( { grep -q _ $var } ) then ... endif 

( -q говорит grep, чтобы быть спокойным и ничего не распечатывать).

Чтобы получить количество имен файлов с определенным символом:

 set n=`ls *.txt | fgrep -c _` 

Это будет печатать только имена файлов, у которых есть символ, и затем подсчитать количество возвращаемых записей. В tcsh вам нужно префикс присваивать с помощью set .

Вы можете использовать команду find в сочетании с wc чтобы получить количество файлов с именем _ :

 set n=`find [path] -maxdepth 1 -name "*_*.txt" | wc -l` 

Замените [path] на каталог, который вы хотите найти.