sed를 사용하여 Mac의 두 번째 줄에 탭 문자와 따옴표 붙은 문자열(json)을 삽입한 다음 개행 문자를 삽입하려고 합니다. 지금까지 나는
sed -i '.json' "2i\\
\"$(printf '\t') \"1.0.1\": \"1.0.1.zip\",\\
" dummy.txt
그리고 출력
" "1.0.1": "1.0.1.zip",
그러다가 삭제하려고 하면\"
sed -i '.json' "2i\\
$(printf '\t') \"1.0.1\": \"1.0.1.zip\",\\
" dummy.txt
거기에는 라벨이 없습니다. 태그를 얻으려면 여기에 뭔가가 빠졌나요?
편집 : 나는 이것을 시도했다
버전=5.5.1
sed -i '' "2i\\
echo -e [\\t] \"1.0.1\": \"1.0.1.zip\",\\
" dummy.txt
내 dummy.txt 파일의 출력은 다음과 같습니다.
echo -e [t] "1.0.1": "1.0.1.zip",
탭이 존재하지 않습니다.
답변1
문제는 작은따옴표입니다. 쉘은 작은따옴표를 "특수 문자를 해석하지 않고 그대로 전달된" 것으로 해석합니다. 이를 큰따옴표로 바꾸고 매개변수 내부의 큰따옴표를 이스케이프해야 합니다. 이 같은:
sed -i "2i\\
\"1.0.1\": \"1.0.1.zip\",
" file.json
원래 질문의 경우 탭 문자를 삽입하면 sed
작동합니다( 2i
파일의 첫 번째 줄이 1인 줄 2에 삽입됩니다). 명령줄(또는 vim)에 탭 문자를 추가하려면 Ctrl+Q-<Tab>
탭 문자가 리터럴 문자이며 편집기/셸에서 해석되지 않는다는 것을 누르십시오. 다른 편집자의 경우 편집기 설명서를 확인하여 텍스트 탭을 입력하는 방법을 알아보세요.
예는 다음과 같습니다:
sed -i.json "2i\\
\"1.0.1\": \"1.0.1.zip\",
<Ctrl-Q><Tab>" file.json
여기서 <Ctrl-Q><Tab>
시퀀스는 해당 특정 키를 누르는 것을 의미합니다. 이는 사용하는 편집기에 따라 다릅니다. 귀하가 VS Code를 사용하고 있다고 언급한 의견에서 <Ctrl+Q><Tab>
트릭 대신 이 질문에 대한 답변에 제공된 옵션 중 하나를 사용할 수 있습니다.https://stackoverflow.com/questions/45566785/vscode-insert-tab-character-manually
-i
또한 와 사이에는 공백이 없어야 합니다 .json
.