使用unix实用程序将每个非字母字符更改为文件中的\ n

时间:2012-03-08 19:37:57

标签: unix nlp gnuwin32 tokenize

我正在观看有关使用unix实用程序的教程这个人在MAC上使用它我有一台Windows笔记本电脑所以我下载了Gnuwin32 Package 然后出现了一个部分,我想用换行符“\ n”

替换文件中的任何非字母字符

教程中的命令行是:

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实用程序中的命令行选项与其他实用程序不同?并且将正则表达式放在单个引号之间,如'A-Z'与“A-Z”不同 如果是这样的话,除了上面的失败试验之外,用换行符替换每个非字母字符的最佳答案是什么

the source of the text i was trying on

3 个答案:

答案 0 :(得分: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

这证明了所有的字母字符,插入符号和方括号都经过字面处理和替换。

这使我们得出的结论是,要按非字母字符分组,您必须使用范围为-c的{​​{1}},就像您在第一个示例中所做的那样。

答案 1 :(得分:0)

嗯..

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

....

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

我希望这会有所帮助。

答案 2 :(得分:0)

cat file.txt | sed -re 's/[^a-zA-Z]/\n/g'