Perl-скрипт для подсчета количества символов control-A на строку в файле - PullRequest
4 голосов
/ 24 июня 2011

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

Ответы [ 5 ]

5 голосов
/ 24 июня 2011

подсчет количества вхождений ^ A на строку (как perl однострочный):

perl -ne '{print tr/\cA//, $/}' file

подсчет общего числа вхождений ^ A:

perl -ne '{$c += tr/\cA//}END{print $c, $/}' file

(редактирование: исправленоопечатка)

3 голосов
/ 24 июня 2011

Это похоже на работу:

#!/usr/bin/perl -n
s/[^\001]//g;
$count += length;
END {print "$count\n"}

Или, для подсчета каждой строки:

#!/usr/bin/perl -n
s/[^\001]//g;
print length, "\n";
1 голос
/ 24 июня 2011

Вы пытаетесь посчитать вхождения байта 01. Он может быть представлен как tr ///, так и m // несколькими способами, включая \cA и \x01.

perl -nE'say "$.: ", tr/\cA//' file

perl -nE'say "$.: " . ( ()=/\cA/g )' file
1 голос
/ 24 июня 2011

Хм, не думал об использовании tr:

perl -ne '{print s/\cA//g, $/}'

s/to/from/g возвращает количество раз, которое строка заменяется. tr/x/y/ возвращает количество символов заменено . В этом случае tr/x/y/ будет работать, но если вы ищете строку, а не один символ, у вас возникнут проблемы.

Я изначально, хотя m/regex/g работал бы, но оказалось, что он возвращает только 1 или 0. Drats.

1 голос
/ 24 июня 2011

Попробуйте это

$_ = '^Axyz^Apqr';
$match= tr/^A/^A/;

даст

$match=2;

В Gvim вы можете вставить элемент управления A, нажав Ctrl + v, а затем Ctrl + a

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...