sed mac 在特定行插入制表符和文本

sed mac 在特定行插入制表符和文本

我正在尝试使用 sed 插入一个制表符,后跟一个带引号的字符串(json),然后在第二行的 mac 上插入换行符。到目前为止我已经

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

问题是单引号。 shell 将单引号解释为“逐字传递,不解释任何特殊字符”。您需要将它们替换为双引号,并对参数内的双引号进行转义。像这样的东西:

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

对于您原来的问题,插入带有 的制表符sed,这有效(2i将在第 2 行插入,其中文件的第一行是 1)。如果您想在命令行(或 vim 中)添加制表符,请按Ctrl+Q-<Tab>告诉它制表符是文字字符,不会被编辑器/shell 解释。对于其他编辑器,请查看编辑器文档以了解如何输入文字选项卡。

例子是:

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

相关内容