我在 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'