sed mac tabulação e texto na linha específica

2

Estou tentando usar sed para inserir uma guia seguida de uma string com aspas (json) seguida de uma nova linha no mac na segunda linha. Até agora eu tenho

sed -i '.json' "2i\
\"$(printf '\t') \"1.0.1\": \"1.0.1.zip\",\
    " dummy.txt

e isso gera

"        "1.0.1": "1.0.1.zip",

e, em seguida, quando tento remover o \"

sed -i '.json' "2i\
$(printf '\t') \"1.0.1\": \"1.0.1.zip\",\
    " dummy.txt

Nenhuma guia está lá. estou faltando alguma coisa aqui para obter a aba?

Editar: Eu tentei isso

versão = 5.5.1

sed -i '' "2i\
echo -e [\t] \"1.0.1\": \"1.0.1.zip\",\
    " dummy.txt

e a saída do meu arquivo dummy.txt é

echo -e [t] "1.0.1": "1.0.1.zip",

Nenhuma guia está presente.

    
por Crystal 24.10.2018 / 20:10

1 resposta

0

O problema são as aspas simples. O shell interpreta aspas simples como "passe isso em textualmente, sem interpretar nenhum caractere especial". Você precisa substituí-los por aspas duplas e sair das aspas duplas dentro do parâmetro. Algo parecido com isto:

sed -i "2i\
\"1.0.1\": \"1.0.1.zip\",
   " file.json

Para sua pergunta original, inserir uma guia com sed , isso funciona ( 2i será inserido na linha 2, onde a primeira linha do arquivo é 1). Se você quiser adicionar um caractere de tabulação na linha de comando (ou no vim), pressione Ctrl+Q-<Tab> para informar que o caractere de tabulação é literal e não deve ser interpretado pelo editor / shell. No caso de outros editores, procure na documentação do editor para ver como inserir uma guia literal.

O exemplo seria:

sed -i.json "2i\
\"1.0.1\": \"1.0.1.zip\",
<Ctrl-Q><Tab>" file.json

em que a sequência <Ctrl-Q><Tab> significa pressionar essas teclas específicas. Isso dependerá do editor que você está usando. Nos comentários, você menciona que está usando o Código VS, portanto, em vez do truque <Ctrl+Q><Tab> , convém usar uma das opções dadas nas respostas a essa pergunta: link

Note também que não há espaço entre -i e .json .

    
por 25.10.2018 / 06:51

Tags