파일 시작 부분에 줄을 추가해야 합니다. 문제의 라인은
\def\submit{}
제가 사용하는 반작업 솔루션이 있습니다 sed
. 모르겠지만 sed
온라인 어딘가에서 얻었지만 줄 시작 부분에 원하지 않는 공백을 삽입하기 때문에 작동하지 않습니다. 별로 상관은 없지만 제대로 하는 게 좋을 것 같아요.
sed -i '1i\ \\\def\\\submit{}' 'dirname/filename'
내가 읽은 바에 따르면 쉘을 탈출하려면 추가 백슬래시가 모두 필요한 것 같습니다. 다른 솔루션도 환영하지만 가능하다면 상대적으로 컴팩트한 라이너를 원합니다. 감사해요.
이 문제,Linux에서 터미널을 통해 sed를 사용하여 파일 시작 부분에 텍스트 삽입비슷하지만 내 표현을 디버깅하는 데 도움이 되지 않습니다.
편집: 이전 접근 방식의 문제점을 설명하기 때문에 @Jonathan의 답변을 수락했습니다. 그러나 답변도 추가했습니다.
답변1
sed
스트림 편집에 사용됩니다. 파일은 스트림이 아닙니다. ed
또는 와 같이 이러한 목적으로 설계된 프로그램을 사용하십시오 ex
. 이 -i
옵션은 sed
이식할 수 없을 뿐만 아니라 실제로 파일을 삭제하고 다시 생성하므로 파일에 대한 모든 심볼릭 링크도 끊어집니다. 이는 의미가 없습니다.
ed -s [file] << EOF
0a
\\def\\submit{}
.
w
EOF
답변2
지금은 sed에 액세스할 수 없기 때문에 이것이 올바른지 완전히 확신할 수는 없지만 첫 번째 백슬래시와 그 뒤의 공백만 제거하면 된다고 생각합니다.
sed -i '1i\\\def\\\submit{}' 'dirname/filename'
그것을 시도하고 그것이 작동하는지 확인하십시오.
답변3
나는 그것을 사용하여 그것의 작업 버전을 얻을 수있었습니다답변: "여러 파일의 시작 부분에 태그를 추가하는 방법은 무엇입니까?".
이전에는 이 문제에 대해 몰랐습니다. 해결책은 다음과 같습니다.
sed -i '1s/^/\\\def\\\submit{}\n/' 'dirname/filename'
그런데 저는 "여러 파일의 시작 부분에 태그를 추가하는 방법"이 이 질문에 연결되는 "Linux 터미널을 통해 sed를 사용하여 파일 시작 부분에 텍스트 삽입"보다 더 나은 참조 질문이라고 생각했습니다. 또한 많은 답변이 있습니다.
답변4
첫째: 백슬래시를 이스케이프하는 것은 쉘 때문이 아닙니다. 문자열은 작은따옴표로 묶여 있습니다. 그러나 그 자체 때문입니다 sed
.
둘째: Chris Tang의 답변에는 장점이 있습니다. 드라이버 대신 망치를 사용하지 마십시오. 반면에 이식성과 심볼릭 링크가 항상 문제가 되는 것은 아니며, 그렇다면 둘 다 문제가 됩니다.
sed '1i\\\def\\submit{}'
그리고
sed '1i\\def\submit{}\'
필요한 일을 해야 합니다. 후자 형식의 후행 백슬래시가 문자열에서 이스케이프 기능을 끄는 이유를 알 수 없지만 적어도 sed
명령이 명령줄에 배치될 때 GNU에서는 그런 식으로 작동하는 것 같습니다. 스크립트에서 사용할 경우 첫 번째 형식만 작동하는 것처럼 보입니다(후행 백슬래시가 줄의 끝을 나타내는 데 사용되고 그 뒤에 또 다른 백슬래시가 오기 때문입니다).
#!/bin/sed -f
1i\
\\def\\submit{}