假设我有一个文本“line1\n\nline2\nline3”,我想在控制台中看到它或将其通过管道传输到文本编辑器,所以它看起来像
line1
line2
line3
因此对特殊字符进行了评估。我可以在不替换正则表达式的情况下做到这一点吗?
答案1
Bash 有一个printf
内置的,支持%b
扩展反斜杠,并支持%q
格式化字符串,以便它可以在不带引号的 shell 命令中使用(即转义 shell 倾向于用反斜杠特殊处理的所有字符)。
换句话说,在 Bash 中,您可以使用
printf '%b\n' 'line1\n\nline2\nline3'
要得到
line1
line2
line3
如果您不希望后面有换行符line3
,请改用printf '%b' 'line1\n\nline2\nline3'
。
反函数 ( %q
) 同样有用,
printf '%q' '(foo $bar baz]'
输出
\(foo\ \$bar\ baz\]
如果您有一个包含带反斜杠的字符串的 Bash 变量,例如
myvar='line1\n\nline2\nline3'
您可以使用扩展转义序列
mytext=$(printf '%b' "$myvar")
如果您只想指定带有转义序列的文字字符串,请使用$''
:
mytext=$'line1\n\nline2\nline3'
答案2
使用内联回显:
$ echo -e "line1\n\nline2\nline3"
line1
line2
line3