替换除字母之外的所有内容

时间:2017-03-31 20:06:16

标签: bash shell unix sed tr

我正在尝试编写单行bash命令,它将每个字母替换为换行符。 (我正在使用bash)

现在,我有:tr ^[a-zA-Z]g '\n'

我也试过tr [^a-zA-Z]g '\n'两个都不能工作。

我认为^字符会使正则表达式匹配除az和AZ之外的所有内容,从而将所有其他字符转换为换行符,但它仍然会将az和AZ转换为换行符,并保留其他字符。

如何确保使用^来反转正则表达式,而不是将其锚定到行的开头?

有谁知道正确的语法?或者我应该尝试使用不同的命令?感谢。

3 个答案:

答案 0 :(得分:3)

tr不支持正则表达式。

您可以使用:

tr -c 'a-zA-Z' '\n'

答案 1 :(得分:3)

sed 方法(使用BRE基本正则表达式):

sed 's/[^a-zA-Z]/\n/g' testfile

答案 2 :(得分:-1)

您对^字符的使用是错误的。方括号外使用的字符^与行的开头匹配。在方括号内使用时,它匹配方括号内未包含的所有字符。所以你的命令应该是:

tr [^a-zA-Z]g '\n'

点击此链接可清楚了解如何使用^字符:Link to Posix basic matching