我在看一个关于使用unix实用程序的教程,那个家伙在MAC上使用它,我有一台windows笔记本电脑,所以我下载了Gnuwin32包然后出现了一个部分,我想用换行符"\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
结果是用newline
替换每个letter
问题是GNUwin32的UNIX实用程序中的命令行选项与其他选项不同吗?把正则表达式放在像"A-Z"这样的单引号之间与"A-Z如果是这样的话,除了以上的失败试验之外,用换行符替换每个非字母字符的最佳答案是什么
我在上尝试的文本的来源
我在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
这证明了所有的无文字字符、插入符号和方括号都被逐字处理并替换了。
这使我们得出结论,要按非字母字符进行拆分,必须使用范围为'A-Za-z'
的-c
,就像在第一个示例中所做的那样。
嗯。。
$ tr -sc '[A-Za-z]' "n" < getCokeInfo_viaFinger_cmu.awk
bin
gawk
f
BEGIN
wisc
edu
finger
....
注意,我使用了char类([A-Za-z]
)。也许你的tr
也需要这个。
我希望这能有所帮助。
cat file.txt | sed -re 's/[^a-zA-Z]/n/g'
;)