当我尝试用 space 替换新行、制表符和连续的 space 时,字符 'a' 被删除
caracter 'a' getting removed when I try to replace new line, tabs and consecutive spaces with a space
下面是我输入的命令
cat program.c | tr '\n' ' ' | tr '\t' ' ' | tr -s [:space:] ' ' >unreadable.c
输出为
Hi w ssup. How re you doing bro Its nice to see you g in bro .
但问题是字符 'a' 正在从文件中删除,这不应该发生。
任何人都可以帮忙。
谢谢
[:space:]
是一个有效的 glob 模式(匹配单个 '
、s
、p
、a
、c
或e
),你的工作目录中似乎有一个名为 a
的文件,模式匹配,所以你 really 运行 tr -s a ' '
而不是在 shell 执行路径名扩展之后。引用模式以防止 shell 扩展它。
... | tr -s '[:space:]' ' ' > unreadable.c
(请注意,如果没有匹配的文件,默认行为是按字面意思处理模式,您的命令将按预期工作。但是,您可以设置一个 shell 选项来处理 non-matching 模式作为错误,因此最好总是引用一个参数以保证它被 字面意思 传递给命令。)
[:space:]
已经包含换行符和制表符,因此您只需要调用一次 tr
:
tr '[:space:]' ' ' < program.c > unreadable.c
你可以像这样使用 sed:
cat program.c | sed -r "s/\n|\t|\s+/ /g" > unreadable.c
下面是我输入的命令
cat program.c | tr '\n' ' ' | tr '\t' ' ' | tr -s [:space:] ' ' >unreadable.c
输出为
Hi w ssup. How re you doing bro Its nice to see you g in bro .
但问题是字符 'a' 正在从文件中删除,这不应该发生。
任何人都可以帮忙。 谢谢
[:space:]
是一个有效的 glob 模式(匹配单个 '
、s
、p
、a
、c
或e
),你的工作目录中似乎有一个名为 a
的文件,模式匹配,所以你 really 运行 tr -s a ' '
而不是在 shell 执行路径名扩展之后。引用模式以防止 shell 扩展它。
... | tr -s '[:space:]' ' ' > unreadable.c
(请注意,如果没有匹配的文件,默认行为是按字面意思处理模式,您的命令将按预期工作。但是,您可以设置一个 shell 选项来处理 non-matching 模式作为错误,因此最好总是引用一个参数以保证它被 字面意思 传递给命令。)
[:space:]
已经包含换行符和制表符,因此您只需要调用一次 tr
:
tr '[:space:]' ' ' < program.c > unreadable.c
你可以像这样使用 sed:
cat program.c | sed -r "s/\n|\t|\s+/ /g" > unreadable.c