我正在观看有关使用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”不同 如果是这样的话,除了上面的失败试验之外,用换行符替换每个非字母字符的最佳答案是什么
答案 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'
)