Проблема:
Мне нужен точный формат для программы почтового автомата.Ожидается определенный формат.Я могу посчитать количество новых строк, возврат каретки, вкладки ... и т. Д.используя такие инструменты, как
cat -vte
и
od -c
и
wc -l ( or wc -c )
Однако я хотел бы знать точное количество начальных и конечных пробелов между символамии разделы текста.Вкладки также.
Вопрос:
Как вы будете анализировать, а затем точно сопоставлять шаблон, используя обычные инструменты Unix + Perl или Python?Однострочники предпочтительнее.Кроме того, что вы посоветуете для соответствия файла в кодировке DOS?Вы бы сначала перевели его в NIX, а затем проанализировали или оставили, как есть?
ОБНОВЛЕНИЕ
Используя это, чтобы увидеть отдельные пробелы [не предполагается, что символы '%' вfile]:
sed 's/ /%/g' filename.000
Планирование создания сценария, который анализирует вкладку каждой строки и содержимое пробела.
Использование решения @ shiplu с указанием на толпу против кошек:
while read l;do echo $l;echo $((`echo $l | wc -c` - `echo $l | tr -d ' ' | wc -c`));done<filename.000
Все еще требуются некоторые настройки для Windows, но все идет хорошо.
SAMPLE TEXT
Ключ для чтения:
отмечены новые строкис \ n
Возврат каретки, помеченный \ r
Неизвестные символы пробела / табуляции, помеченные [: пробел:] (нужно их учитывать)
\r\n
\n
[:space:]Institution Anon LLC\r\n
[:space:]123 Blankety St\r\n
[:space:]Greater Abyss, AK 99999\r\n
\n
\n
[:space:] 10/27/2011\r\n
[:space:]Requested materials are available for pickup:\r\n
[:space:]e__\r[:space:] D_ \r[:space:] _O\r\n
[:space:]Bathtime for BonZo[:space:] 45454545454545[:space:] 10/27/2011\r\n
[:space:]Bathtime for BonZo[:space:] 45454545454545[:space:] 10/27/2011\r\n
\n
\n
\n
\n
\n
\n
[:space:] Pantz McManliss\r\n
[:space:] Gibberish Ave\r\n
[:space:] Northern Mirkwood, ME 99999\r\n
( untold variable amounts of \n chars go here )
ОБНОВЛЕНИЕ 2
Использование IFS с чтением дает результаты, подобные рубину, опубликованному кем-то ниже.
while IFS='' read -r line
do
printf "%s\n" "$line" | sed 's/ /%/g' | grep -o '%' | wc -w
done < filename.000