2

内容のファイルがあります:

Version:2.0

次の形式の出力が必要です。

"Version":"2.0"

これらの列に二重引用符を挿入するにはどうすればよいですか?

4

7 に答える 7

3

シンプルなワンライナー:

perl -plwe 's/([^:]+)/"$1"/g'

コロン以外はすべて引用符で囲みます。オプションのため-l、最後に改行を含めてこれを回避します。

于 2013-02-22T10:36:07.860 に答える
1

別の方法は次のsedとおりです。

echo Version:2.0 | sed 's/[^:]*/"&"/g'

出力:

"Version":"2.0"
于 2013-02-22T12:21:21.537 に答える
1
sed -r 's/(^|$)/"/g;s/:/":"/' file

kent$  echo "Version:2.0"|sed -r 's/(^|$)/"/g;s/:/":"/'  
"Version":"2.0"
于 2013-02-22T10:20:21.500 に答える
1
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'
于 2013-02-22T10:24:05.323 に答える
1
 perl -lpe'$_ = join ":",map qq{"$_"},split /:/' myfile
于 2013-02-22T10:25:57.470 に答える
0

perl では、次のように実行できます。

perl -pe "s/([^:]+):(.+)/\"\1\":\"\2\"/" YourTextFile.txt

編集 1: Linux では、$1and$2の代わりに\1andを使用すると\2、引用符で囲まれる必要がある文字列が空になります。出力は '"":""' になります。$これは、一部の *nix シェルではドルが特殊文字であるためだと思います。ドルのエスケープも同様に機能します。

perl -pe "s/([^:]+):(.+)/\"\$1\":\"\$2\"/" YourTextFile.txt

編集 2: @TLP が示唆したように、シェル補間を回避し、すべてのエスケープを削除できるため、単一引用符を使用するのが *nix の方法です。

perl -pe 's/([^:]+):(.+)/"$1":"$2"/' YourTextFile.txt
于 2013-02-22T10:21:06.960 に答える
0

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
于 2013-02-22T10:29:04.273 に答える