簡體   English   中英

使用sed命令查找並替換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM