我有一个包含内容的文件:
Version:2.0
我需要以下格式的输出:
"Version":"2.0"
我应该如何在这些列中插入双引号?
简单的单行:
perl -plwe 's/([^:]+)/"$1"/g'
取任何不是冒号的内容并在其周围加上引号。由于该-l
选项,我们避免了这种情况,包括最后的换行符。
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
这是另一种sed
选择:
echo Version:2.0 | sed 's/[^:]*/"&"/g'
输出:
"Version":"2.0"
在 perl 中,你可以这样做:
perl -pe "s/([^:]+):(.+)/\"\1\":\"\2\"/" YourTextFile.txt
编辑 1:在 Linux 中,使用$1
and$2
而不是\1
and\2
会导致应该引用的字符串为空 - 然后输出为 '"":""'。我认为这是因为美元$
在某些 *nix shell 中是一个特殊字符。逃避美元也有效:
perl -pe "s/([^:]+):(.+)/\"\$1\":\"\$2\"/" YourTextFile.txt
编辑2:正如@TLP 所建议的,使用单引号是*nix 的方法,因为它避免了shell 插值并且还允许删除所有转义。
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
它做了额外的工作并将现有报价加倍。
为了创建测试文件,我使用了以下代码:
cat << EODATA > testfile
Version:2.0
Some:field:with:double(")quotes
EODATA