我正在尝试编写单行bash命令,它将每个字母替换为换行符。 (我正在使用bash)
现在,我有:tr ^[a-zA-Z]g '\n'
我也试过tr [^a-zA-Z]g '\n'
两个都不能工作。
我认为^字符会使正则表达式匹配除az和AZ之外的所有内容,从而将所有其他字符转换为换行符,但它仍然会将az和AZ转换为换行符,并保留其他字符。
如何确保使用^来反转正则表达式,而不是将其锚定到行的开头?
有谁知道正确的语法?或者我应该尝试使用不同的命令?感谢。
答案 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