sed mac 특정 줄에 탭과 텍스트 삽입

sed mac 특정 줄에 탭과 텍스트 삽입

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.

관련 정보