内容のファイルがあります:
Version:2.0
次の形式の出力が必要です。
"Version":"2.0"
これらの列に二重引用符を挿入するにはどうすればよいですか?
シンプルなワンライナー:
perl -plwe 's/([^:]+)/"$1"/g'
コロン以外はすべて引用符で囲みます。オプションのため-l
、最後に改行を含めてこれを回避します。
別の方法は次のsed
とおりです。
echo Version:2.0 | sed 's/[^:]*/"&"/g'
出力:
"Version":"2.0"
sed -r 's/(^|$)/"/g;s/:/":"/' file
kent$ echo "Version:2.0"|sed -r 's/(^|$)/"/g;s/:/":"/'
"Version":"2.0"
awk -F":" -v OFS=":" '{for(i=1;i<=NF;i++){$i="\""$i"\"";}print}'
テスト済み:
> echo "Version:2.0" | awk -F":" -v OFS=":" '{for(i=1;i<=NF;i++){$i="\""$i"\"";}print}'
"Version":"2.0"
また
perl -F -lane 'for(@F){$_="\"".$_."\"";}print join ":",@F'
perl -lpe'$_ = join ":",map qq{"$_"},split /:/' myfile
perl では、次のように実行できます。
perl -pe "s/([^:]+):(.+)/\"\1\":\"\2\"/" YourTextFile.txt
編集 1: Linux では、$1
and$2
の代わりに\1
andを使用すると\2
、引用符で囲まれる必要がある文字列が空になります。出力は '"":""' になります。$
これは、一部の *nix シェルではドルが特殊文字であるためだと思います。ドルのエスケープも同様に機能します。
perl -pe "s/([^:]+):(.+)/\"\$1\":\"\$2\"/" YourTextFile.txt
編集 2: @TLP が示唆したように、シェル補間を回避し、すべてのエスケープを削除できるため、単一引用符を使用するのが *nix の方法です。
perl -pe 's/([^:]+):(.+)/"$1":"$2"/' YourTextFile.txt
awk
このスニペットが役立つと思います:
gawk -F: '{gsub("\"", "\"\""); \
for(i=1;i<NF;i++) printf("\"%s\":",$i); \
printf("\"%s\"\n",$NF); }' testfile
それは余分な仕事をし、既存の引用符を2倍にします。
テストファイルを作成するために、次のコードを使用しました。
cat << EODATA > testfile
Version:2.0
Some:field:with:double(")quotes
EODATA