我有一个包含内容的文件:
Version:2.0
我需要以下格式的输出:
"Version":"2.0"
我应该如何在这些列中插入双引号?
答案 0 :(得分:3)
简单的单行:
perl -plwe 's/([^:]+)/"$1"/g'
取任何不是冒号的东西并在其周围加上引号。由于-l
选项,我们会避免这种情况,包括最后的换行符。
答案 1 :(得分:1)
sed -r 's/(^|$)/"/g;s/:/":"/' file
kent$ echo "Version:2.0"|sed -r 's/(^|$)/"/g;s/:/":"/'
"Version":"2.0"
答案 2 :(得分: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'
答案 3 :(得分:1)
perl -lpe'$_ = join ":",map qq{"$_"},split /:/' myfile
答案 4 :(得分:1)
这是另一个sed
替代方案:
echo Version:2.0 | sed 's/[^:]*/"&"/g'
输出:
"Version":"2.0"
答案 5 :(得分:0)
在perl中,你可以这样做:
perl -pe "s/([^:]+):(.+)/\"\1\":\"\2\"/" YourTextFile.txt
编辑1:在Linux中,使用$1
和$2
代替\1
和\2
会导致应引用的字符串为空 - 然后输出'“”:“”'。我认为这是由于美元$
在某些* nix shell中是一个特殊字符。逃避美元也是有效的:
perl -pe "s/([^:]+):(.+)/\"\$1\":\"\$2\"/" YourTextFile.txt
编辑2:正如@TLP建议的那样,使用单引号是* nix的方法,因为它避免了shell插值并且还允许删除所有转义。
perl -pe 's/([^:]+):(.+)/"$1":"$2"/' YourTextFile.txt
答案 6 :(得分: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