我正在努力解决sed
在 macOS 和 Ubuntu 上都会出现的 in bash 问题。在长时间的调试过程中,我将其精确定位到这个最小的示例:
echo "abcde" | sed 's/.*/x/'
结果是:
X
这是有道理的,因为中的正则表达式sed
将任何输入替换为x
.
相似地:
echo "" | sed 's/.*/x/'
X
echo "-a" | sed 's/.*/x/'
X
等等。然而:
echo "-n" | sed 's/.*/x/'
请注意,输出现在为空。
这是怎么回事?为什么"-n"
as 输入与sed
任何其他(或无)输入的处理方式不同?
是
echo
,不是sed
。例如,您可以使用 来检查输出
hexdump -cx
。对于
echo a
,您将获得输出a
和换行符\n
或 0x0a。现在,因为字符串是空的,所以你只得到一个换行符。
-n
表示echo
不输出尾随换行符。所以,现在您没有要回显的字符串,也没有附加换行符。所以什么都没有。echo
没有选项-a
,因此-a
被解释为要回显的字符串而不是选项。所以,随着
$
提示: