изменение каждого не буквенного символа на \ n в файле с помощью утилит unix - PullRequest
0 голосов
/ 08 марта 2012

Я смотрел учебник по использованию утилит Unix, который парень использовал на MAC. У меня был ноутбук с Windows, поэтому я скачал Пакет Gnuwin32 , а затем пришла часть, где я хочу заменить любой не буквенный символ вфайл с новой строкой "\ n"

командная строка в учебнике была:

tr -sc 'A-Za-z' '\n'  < filename.txt |less 

, он работал с ним, но когда я пытался это, он ставил символ "1" послесимвол

'S'h'a'k'e's'p'e'a'r'e'T'H'E'T'E'M'P'E'S'T'f'r'o'm'O'n'l'i'n'e'L'i'b'r'a'r'y'o'f'L'i'b'e'r't'y'h't't'p'o'l'l'l'i'b'e'r't'y'f'u'n'd'o'r'g'

я пытался

tr -sc "A-Za-z" "\n"  < filename.txt |less 

после каждой буквы добавлялась новая строка

n
e
L
i
b
r
a

я пытался удалить опцию комплимента и добавить ^ вregex

tr "[^A-Za-z]" "\n"  < filename.txt |less 

результат заменял каждые letter на newline

. Вопрос в том, отличаются ли параметры командной строки в утилитах UNIX GNUwin32 от других?и помещает ли регулярное выражение в одинарные кавычки, такие как «AZ», отличное от «AZ», и если да, то какой будет лучший ответ для замены каждого не буквенного символа новой строкой, кроме неудачных испытаний выше

источник текста, который я пробовал

Ответы [ 3 ]

1 голос
/ 09 марта 2012

Я проверил ваши примеры в моих tr --version (GNU coreutils) 8.5 и

1) использование одинарных или двойных кавычек не имеет значения 2) похоже, что нельзя использовать символы отрицания с помощью ^

Когда вы пишете [^A-Za-z], все эти символы обрабатываются буквально:

echo "abc abd [hh] d^o 1976" | tr '[^A-Za-z]' '.'

или с двойными кавычками

echo "abc abd [hh] d^o 1976" | tr "[^A-Za-z]" '.'

дает следующий вывод

... ... .... ... 1976

Что доказывает, что все афабетические символы, каретки и квадратные скобки были обработаны буквально и заменены.

Это приводит нас к выводу, что для разделения на неалфавитные символы необходимо использовать -c сдиапазон 'A-Za-z', точно так же, как вы это делали в первом примере.

0 голосов
/ 10 марта 2012
cat file.txt | sed -re 's/[^a-zA-Z]/\n/g'

;)

0 голосов
/ 08 марта 2012

Хм ..

$ tr -sc '[A-Za-z]' "\n" < getCokeInfo_viaFinger_cmu.awk
bin
gawk
f
BEGIN
wisc
edu
finger

....

Обратите внимание, что я использовал char-class ([A-Za-z]).Может быть, ваш tr тоже этого требует.

Надеюсь, это поможет.

...