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 -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 回答
1

这是另一种sed选择:

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

输出:

"Version":"2.0"
于 2013-02-22T12:21:21.537 回答
0

在 perl 中,你可以这样做:

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

编辑 1:在 Linux 中,使用$1and$2而不是\1and\2会导致应该引用的字符串为空 - 然后输出为 '"":""'。我认为这是因为美元$在某些 *nix shell 中是一个特殊字符。逃避美元也有效:

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

编辑2:正如@TLP 所建议的,使用单引号是*nix 的方法,因为它避免了shell 插值并且还允许删除所有转义。

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

它做了额外的工作并将现有报价加倍。

为了创建测试文件,我使用了以下代码:

cat << EODATA > testfile
Version:2.0
Some:field:with:double(")quotes
EODATA
于 2013-02-22T10:29:04.273 回答