sed를 사용하여 커피 스크립트에 줄을 삽입하려고 하는데 첫 번째 탭 문자를 무시하는 것 같습니다.
삽입하려는 파일에는 다음 줄이 있습니다.
karmaServer.start
다음과 같이 행 뒤에 행을 삽입하고 싶습니다.
karmaServer.start
flags: ['--no-sandbox']
그래서 나는 작동해야 한다고 생각하는 sed 스크립트를 작성했습니다.
sed "/^\t\tkarmaServer.start/a\t\t\t\tflags: ['--no-sandbox']" build/unit-test.coffee
그런데 결과가 이상해요. 나는 다음을 얻습니다
karmaServer.start
t flags: ['--no-sandbox']
t
왜 문자로 줄을 시작하는지, 문자를 제거하는 방법을 이해할 수 없습니다 .
어떤 아이디어가 있나요?
답변1
명령에 줄 바꿈을 추가해야 합니다 sed
(그런 다음 이스케이프된 줄 바꿈에 대한 쉘의 처리를 고려해야 합니다).
sed "/^\t\tkarmaServer.start/a\\
\t\t\t\tflags: ['--no-sandbox']" build/unit-test.coffee
GNU sed
매뉴얼에 따르면:
ㅏ\
텍스트 포함된 각 줄 바꿈 앞에 백슬래시가 오는 텍스트를 추가합니다.
이것은 매우 명확하지 않으며 이와 같이 형식이 지정되지 않았습니다. (아아, 명령으로 보면 특별히 명확하지 않습니다 man
.) 명령의 형식이 a
백슬래시, 개행 문자, 그리고 다음으로 구성되어 있다는 것을 알 수 있습니다.텍스트. 즉, 왼쪽 열의 모든 내용입니다.
질문 주석에서 지적했듯이 sed
s는 잘못된 명령을 처리하는 방법이 다릅니다. Spinellis는 sed
필수 백슬래시와 개행 문자 외에 다른 것이 있음을 알리는 오류를 생성합니다.
% sed "/^\t\tkarmaServer.start/a\t\t\t\tflags: ['--no-sandbox']" /dev/null sed: 1: "/^\t\tkarmaServer.start ...": 명령 끝에서 \ 뒤에 추가 문자 %
귀하의 특별한 선택은 sed
나머지 라인을 다음과 같이 취급하는 것 같습니다.텍스트토론. 그러나 첫 번째 백슬래시는 여전히 다음 필수 백슬래시로 간주됩니다 a
. 그래서 당신이 끝내는 것은텍스트주장은
t\t\t\tflags: ['--샌드박스 없음']
처음에는 t
예상한 것보다 탭이 하나 적습니다.