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에 전달하여 이스케이프해야 합니다 \\n
. 명령줄에 큰따옴표로 묶인 문자열이 있으므로 이를 이스케이프하려면 또 다른 백슬래시를 추가해야 합니다. (또는 두 백슬래시를 모두 이스케이프 처리합니다. 큰따옴표로 묶인 문자열에는 so 와 final이 모두 제공되므로 여기서는 중요하지 않습니다 \n
. )\n
\\\n
\\\\n
\\n
또한 printf에 대한 첫 번째 인수와 두 번째 인수를 구분하는 공백이 누락되었습니다.
$ sed -e "1s|^|printf '%s\\\n' |" < file1
printf '%s\n' 'a 1-61' 'a 7134-7194'