san*_*who -1 unix linux bash sh tr
下面是我正在输入的命令
cat program.c | tr '\n' ' ' | tr '\t' ' ' | tr -s [:space:] ' ' >unreadable.c
Run Code Online (Sandbox Code Playgroud)
输出是
Hi w ssup. How re you doing bro Its nice to see you g in bro .
Run Code Online (Sandbox Code Playgroud)
但问题是字符'a'正在从文件中删除,这不应该发生.
任何人都可以帮助.谢谢
[:space:]是一个有效的glob模式(匹配单个',s,p,a,c,或e),你似乎有一个文件名为a在匹配模式工作目录,所以你真正运行tr -s a ' '的外壳进行路径名扩展,而不是之后.引用模式以防止shell扩展它.
... | tr -s '[:space:]' ' ' > unreadable.c
Run Code Online (Sandbox Code Playgroud)
(注意,如果没有匹配的文件,默认行为是按字面意思处理模式,并且您的命令将按预期工作.但是,有一个shell选项可以设置为将不匹配的模式视为错误,因此它总是引用一个参数来保证它按字面顺序传递给命令是一种好习惯.)
[:space:]已包含换行符和标签,因此您只需要一次调用tr:
tr '[:space:]' ' ' < program.c > unreadable.c
Run Code Online (Sandbox Code Playgroud)