0

我正在看一个关于使用 unix 实用程序的教程,那个人在 MAC 上使用

本教程中的命令行是:

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

它对他有用,但是当我尝试它时,它在一个字符后放置了一个单引号“'”字符

'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

我试图删除赞美选项并在正则表达式中添加 ^

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

结果是用letter一个newline

问题是 GNUwin32 的 UNIX 实用程序中的命令行选项是否与其他选项不同?并且将正则表达式放在像 'AZ' 这样的单引号之间是否与 "AZ" 不同,如果是这样,用换行符替换每个非字母字符的最佳答案是什么,除了上面失败的试验

我正在尝试的文本的来源

4

3 回答 3

1

我在我的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

这证明了所有的单字母字符、插入符号和方括号都已被逐字处理并替换。

这使我们得出结论,要按非字母字符进行拆分,您必须使用-crange 'A-Za-z',就像您在第一个示例中所做的那样。

于 2012-03-09T18:35:05.167 回答
0

嗯..

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

....

请注意,我使用了 char-class ( [A-Za-z])。也许你tr也需要。

我希望这有帮助。

于 2012-03-08T19:48:15.150 回答
0
cat file.txt | sed -re 's/[^a-zA-Z]/\n/g'

;)

于 2012-03-10T19:53:07.033 回答