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



我在看一个关于使用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'

;)

最新更新