V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
yanshenxian
V2EX  ›  Linux

求一个 sed 脚本 转义行中的引号

  •  
  •   yanshenxian · 2020-08-16 09:02:20 +08:00 · 1901 次点击
    这是一个创建于 1553 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 需要对文件夹内的 1 万多个文件进行操作

    • 将每个文件的第二行中的引号进行转义

    例如某个文件内容是 (title 值以及其中的引号内容并不是固定的,且有可能出现多处内嵌引用)

    ...第一行内容
    title = "标题中的"引号内容"需要转义" 
    ...第三行及剩下的内容
    

    需要修改成

    ...第一行内容
    title = "标题中的\"引号内容\"需要转义" 
    ...第三行及剩下的内容
    
    10 条回复    2020-08-16 16:15:16 +08:00
    lululau
        1
    lululau  
       2020-08-16 09:41:19 +08:00 via iPhone
    原始文本没有转义,怎么判定嵌套层级?你倒是说下规则啊
    yanshenxian
        2
    yanshenxian  
    OP
       2020-08-16 10:13:24 +08:00
    @lululau 原始文本格式是 title = "{{标题内容}}" ,把 {{标题内容}} 的里面包含的引号转义掉就行,不需要考虑嵌套
    yanshenxian
        3
    yanshenxian  
    OP
       2020-08-16 10:14:09 +08:00
    写了一版粗糙的 不知道怎么优化
    find ./ -type f | xargs sed -i -e '2s/"/\\"/g' -e '2s/\\"/"/' -e '2s/\(.*\)\\"/\1"/'
    rrfeng
        4
    rrfeng  
       2020-08-16 10:20:15 +08:00 via Android
    意思是把非首尾的“换掉就行了吧?
    yanshenxian
        5
    yanshenxian  
    OP
       2020-08-16 10:30:06 +08:00
    @rrfeng en 是这样的。。
    freedomSky
        6
    freedomSky  
       2020-08-16 11:06:36 +08:00   ❤️ 1
    sed -i '2{s/title = "\(.*\)"/\1/;s/"/\\"/g;s/\(.*\)/title = "\1"/;}' data.txt
    好像 sed 没办法直接对 group 项做处理吧
    vhysug01
        7
    vhysug01  
       2020-08-16 12:13:25 +08:00   ❤️ 1
    每次看到这么复杂的,我直接拿脚本语言处理的。怎么方便怎么来
    ruidoBlanco
        8
    ruidoBlanco  
       2020-08-16 12:51:27 +08:00   ❤️ 1
    awk -F\" 'NR!=2; NR==2 { OFS="\""; for(i=2; i<NF-1; i++) $i=$i"\\" ; print }'
    rrfeng
        9
    rrfeng  
       2020-08-16 16:14:33 +08:00 via Android   ❤️ 1
    s/"/\\"/g;s/^\\//;s/\\"$/"/

    先替换所有的,再把头尾去掉。
    rrfeng
        10
    rrfeng  
       2020-08-16 16:15:16 +08:00 via Android
    或者加断言引号不是开头或者结尾的,再替换
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1362 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 17:55 · PVG 01:55 · LAX 09:55 · JFK 12:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.