sedを使用して、Macの2行目にタブ文字と引用符付きの文字列(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コードを使用していると述べたコメントでは、トリックの代わりにこの<Ctrl+Q><Tab>
質問に対する回答に記載されているオプションの1つを使用できます。https://stackoverflow.com/questions/45566785/vscode-insert-tab-character-manually
-i
また、との間には空白があってはなりません.json
。