첫 번째 줄에서 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에 전달하여 이스케이프해야 합니다 \\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'

관련 정보