是否有一些编辑器工具可以将文字“\n”显示为换行符?

是否有一些编辑器工具可以将文字“\n”显示为换行符?

在python控制台中:

print('xx\nyy')
xx
yy

在 bash 控制台中:

echo -e 'xx\nyy'
xx
yy

在 mysql 控制台中:

create database mytest;
use mytest;
CREATE TABLE sample(content VARCHAR(250));
insert into sample(content) values('xx\nyy');
select content from sample;
+---------+
| content |
+---------+
| xx
yy   |
+---------+

它们都将 literal 视为 ,\nnewline不是 literal \n

cat > mytest.txt <<EOF
xx\nyy
EOF

使用vim或打开 mytest.txt leadpad,你会发现vimleafpad将文字\n视为文字\n,而不是换行符。是否有将文字\n视为换行符的编辑器工具?

答案1

\n是 Linux/Unix 表达“换行符”的方式,除非您指的是两个字符\n。这就是通过文本编辑器输入字符序列的方式。如果您希望\n字符串中有两个字符序列,而不是“换行符”,则必须通过在字符串前面放置一个来转义\(使字符串\不特殊)。\

"xx\\nyy"

是 6 个字符串x, x, \, n, y, y

答案2

TL;DR:将其视为换行符的趋势\n并不普遍,当将其视为换行符时,避免这种情况的方法(尤其是最好的“方式”因上下文而异。Shell 实际上并不将其视为换行符,因此使用 时echo,就不会传递-e对于其他语言,请查阅该语言的文档。

这个问题的前提是错误的。\n在大多数情况下,实际上并不代表换行符。某些编程语言(和数据库查询语言)\n在某些情况下会进行特殊处理。这种情况相当普遍,但远非普遍。

\n被视为表示换行符时,发生这种情况的原因是具体的规则具体的语言,因此没有完全通用的方法来抑制它。特别是,当它根本没有被特殊处理时,试图抑制它通常会导致你不想要的其他东西。在许多情况下,\\n按照 waltinator 的建议写作会起作用,但在许多其他情况下它不会起作用,即使在它起作用的情况下,它通常也不是表达文字的最清晰或最简单的方法\n

尤其,shell 通常不将该序列\n视为换行符。您可以使用特殊形式的引号让 Bash 执行此操作$' '。也就是说,$'\n'被视为换行符。在 Bash 和其他 Bourne 风格的 shell 中,无论是在单引号还是双引号中,\n都是保持不变的。

  • '\n'变得很简单,因为在你的shell中,在打开--反斜杠之后\n没有字符被特殊处理,在单引号中永远不会被特殊处理。''
  • "\n"就只是\n因为\选择性地在双引号中特殊处理,但序列\n没有特殊含义,所以这还没完成。
  • 在引号之外,\n变为简单的n,因为\被特殊处理,但是序列\n没有特殊含义,所以n在删除引号之后就变成了。

'xx\nyy'正如您所使用,这是迄今为止xx\nyy在 Bash 中表达文字字符串的最清晰的方式,因为非常简单的规则是,在开始和结束单引号之间的所有内容都按字面意思处理。我建议不要为此使用任何其他形式的引号。这是可以做到的,但不会改善任何东西。在您的示例中,echo -e执行转换的是。

您收到换行符的原因echo -e 'xx\nyy'是:

  • shell\n按字面意思处理 中的'xx\nyy',删除引号后变为xx\nyy。因此传递给 的第二个参数echoxx\nyy
  • echo由于您传递了选项,因此它本身被\n视为换行符-e如果你不想这样,就不要通过-e

我应该指出,它echo的可移植性不强。原因之一是,echo在某些系统和某些 shell 中,某些实现会自动像echo -e在 Ubuntu 中一样运行。(因此,对于脚本,通常最好选择printf。)但是,echo在 Ubuntu 上可能使用的实现是 Bash 的echo内置函数和 GNU Coreutils echo,它提供了/bin/echo(在较新的系统上可能被解析为,/usr/bin/echo其中/bin/usr/bin被合并)。这两个echos 的行为都与我描述的一样:除非使用该选项,否则反斜杠序列(例如)将按\n字面形式打印-e

至于\n您使用哪种编程语言或数据库查询语言,一般答案是您应该查阅该语言的文档。在您的 Python 示例中, in\n表示'xx\nyy'换行符。虽然您可以这样写'xx\\nyy'(Python 确实支持这一点),但通常更清楚的做法是简单地通过添加前缀来抑制所有反斜杠序列,r使其成为逐字字符串文字:r'xx\nyy'

相关内容