我正在尝试使用 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
。