[英]find and replace using sed command
我想在雙引號之間找到單引號'
,並使用sed命令將其替換為(反斜杠單引號單引號) \\' '
。
輸入= 'gender':"Men's",'colour':'Red','name':"Men's levi's"
輸出= 'gender':"Men\\' 's",'colour':'Red','name':"Men\\' 's levi\\' 's"
我嘗試在這里用管道替換逗號,但是當嘗試用\\' '
替換單引號時,它不起作用:
sed 's/(\"[^"\'']\{1,\}),([^"\'']\{1,\}\")/\1 | \2/g' test.csv
這是使用awk
做到這一點的一種方法:
awk 'BEGIN{FS=OFS=","} {
for (i=1; i<=NF; i++)
if (split($i, a, / *: */) == 2 && a[2] ~ /^"/) {
gsub("\047", "\\\047 \047", a[2])
$i=a[1] ":" a[2]
}
} 1' file
'gender':"Men\' 's",'colour':'Red','name':"Men\' 's levi\' 's"
使用用於多字符RS和RT的GNU awk,您所需要做的就是:
$ awk -v RS='"[^"]+"' '{gsub(/\047/,"\\\047 \047",RT); ORS=RT} 1' file
'gender':"Men\' 's",'colour':'Red','name':"Men\' 's levi\' 's"
使用sed
您可以執行以下操作:
sed -e ":a"
-e "s/'\([^\\\":]*\(\\.[^\\\":]*\)*\"\)/\\\\\f \f\1/"
-e "ta"
-e "s/\\\\\f \f/\\\' '/g" file
換行和縮進是為了提高可讀性。 重點是,您首先匹配單引號,然后再跟雙引號(可能不會立即),將其替換為\\\\\\f \\f
( \\\\
文字反斜杠, \\f
換頁符),可以完成相同的操作使用循環( t
),然后用所需的字符串替換以前的替換。 主正則表達式還應注意雙引號字符串中轉義的雙引號,但如果其中包含冒號:
或逗號,
則它將失敗。
單線:
sed -e ":a" -e "s/'\([^\\\":]*\(\\.[^\\\":]*\)*\"\)/\\\\\f \f\1/" -e "ta" -e "s/\\\\\f \f/\\\' '/g" file
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.