Intereting Posts
Сохраняет ли ваше имя хоста на вашей сетевой карте? centos 7? отобразить отсутствующий счетчик icmp_seq | команда ping когда я могу просмотреть \ t как символ, который охватывает фиксированную ширину, вместо управляющего символа, который переходит к следующей позиции табуляции? Ядро: EDAC MC0: UE страница 0x0 указывает на плохую память, драйвер или что-то еще? Сопоставление файлов с разделителями табуляции Как удалить интерфейс vnet0? Использование ~ / .dircolors в рыбной оболочке SSD установлен, но отображается как жесткий диск в командном выводе Отключение основного дисплея в Fedora 22 (без видимости основного дисплея) Как открыть Audio CD в проигрывателе Qmmp? Префикс и добавление блоков текста в список файлов Продолжает получать файлы сообщений одинаково, используя find Может ли htmldoc создавать многоуровневые закладки PDF? запуск Linux на ноутбуке с Windows без виртуальной машины Установка Graphviz & Dependencies без доступа в Интернет

Поиск нескольких вхождений определенного символа в 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] на каталог, который вы хотите найти.