2
A
回答
3
簡單的一行:
perl -plwe 's/([^:]+)/"$1"/g'
採取任何不是一個冒號,把周圍的引號。由於-l
選項,我們避免在最後包括換行符。
1
sed -r 's/(^|$)/"/g;s/:/":"/' file
kent$ echo "Version:2.0"|sed -r 's/(^|$)/"/g;s/:/":"/'
"Version":"2.0"
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的方式,因爲它避免了外殼插值,也允許放棄全部逃逸。
perl -pe 's/([^:]+):(.+)/"$1":"$2"/' YourTextFile.txt
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'
1
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
1
下面是另一個sed
選擇:
echo Version:2.0 | sed 's/[^:]*/"&"/g'
輸出:
"Version":"2.0"
相關問題
- 1. 如何使用的soapUI使用的soapUI
- 2. 如何使用的WebView使用JavaFX
- 3. 如何使用ArrayList使用ICollection的
- 4. 的Neo4j - 如何使用executeCypher使用PARAMS
- 5. 如何使用,使用的承諾
- 6. 如何使用的preg_match()使用PHP
- 7. 如何使用,使用的DbContext
- 8. 如何使用JOIN使用Hibernate的session.createSQLQuery()
- 9. 如何使用$ rootScope.Scope的使用方法?
- 10. 如何使用使用Response.Transmit()
- 11. 如何使用使用AJAX
- 12. 如何使用,使用R
- 13. 如何使用使用PowerShell
- 14. Rails - 如何使用github的插件(如何安裝,使用等)
- 15. 如何使用
- 16. 如何使用
- 17. 如何使用
- 18. 如何使用
- 19. 如何使用
- 20. 如何使用
- 21. 如何使用
- 22. 如何使用
- 23. 如何使用
- 24. 如何使用
- 25. 如何使用
- 26. 如何使用
- 27. 如何使用
- 28. 如何使用
- 29. 如何使用
- 30. 如何使用
這實際上只打印所有列的':'。不要將'Version:2.0'放在雙引號中。 – 2013-02-22 11:34:42
@AshutoshNarayan我不知道該怎麼告訴你,除了:不,它不僅打印所有列的冒號,而且它確實把它放在雙引號中。正則表達式去除任何東西的唯一方式是匹配,如果匹配,它也會捕獲和替換。如果它不適合你,那是因爲你改變了它,或者你的shell儘管插入了'$ 1',但即便如此,仍然會插入引號。所以,不,你說的這個代碼不會發生。 – TLP 2013-02-22 11:41:03
是的,它插入雙引號。我想我會錯過一些東西。可接受的。 – 2013-02-22 12:12:53