在第一行 printf '%s\n' 中回显,但未打印 \ 符号

在第一行 printf '%s\n' 中回显,但未打印 \ 符号

我在 file1 中有以下设置

'a 1-61' 'a 7134-7194'

我试图在 file1 的开头打印

sed -e "1s|^|printf '%s\n'|" < file1 > file2

但我得到

printf '%s
''a 1-61' 'a 7134-7194'

我不知道如何排除 \ 符号以使其工作。期望输出是

printf '%s\n' 'a 1-61' 'a 7134-7194'

答案1

GNU sed 解释\n为代表换行符,所以这就是您所得到的。为了防止这种情况,您需要通过向 sed 传递 string 来转义它\\n。由于命令行上有双引号字符串,因此您需要添加另一个反斜杠来转义它。 (或者转义两个反斜杠;这里并不重要,因为在双引号字符串中,\n给出\n,因此\\\n\\\\n最终都为\\n。)

另外,您缺少将 printf 的第一个参数与第二个参数分开的空格,因此:

$ sed -e "1s|^|printf '%s\\\n' |" < file1
printf '%s\n' 'a 1-61' 'a 7134-7194'

相关内容