我正在尝试使用 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",
没有标签。
问题是单引号。shell 将单引号解释为“逐字传递,不解释任何特殊字符”。您需要用双引号替换它们并转义参数内的双引号。像这样的东西:
对于您的原始问题,插入一个带有 的选项卡
sed
,这是有效的(2i
将在第 2 行插入,其中文件的第一行是 1)。如果要在命令行(或 vim)中添加制表符,请按Ctrl+Q-<Tab>
以告诉它制表符是文字而不是由编辑器/shell 解释。对于其他编辑器,请查看编辑器文档以了解如何输入文字选项卡。这个例子是:
其中
<Ctrl-Q><Tab>
序列意味着按下那些特定的键。这取决于您使用的编辑器。在您提到您正在使用 VS Code 的评论中,因此<Ctrl+Q><Tab>
您可能希望使用此问题的答案中给出的选项之一,而不是使用技巧:https ://stackoverflow.com/questions/45566785/vscode-insert-手动制表符还要注意
-i
和之间没有空格.json
。