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

sed 删除匹配行 ?

  •  
  •   station · 326 天前 · 2042 次点击
    这是一个创建于 326 天前的主题,其中的信息可能已经有所发展或是发生改变。
    自定义 openwrt 默认设置

    如何删除 dnsmasq 段落中的某一行

    sed 试了试,我搞不定

    config dnsmasq
    option domainneeded '1'
    option localise_queries '1'
    option rebind_protection '1'
    option rebind_localhost '1'
    option local '/lan/'
    option expandhosts '1'
    option authoritative '1'
    option readethers '1'
    option leasefile '/tmp/dhcp.leases'
    option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
    option nonwildcard '1'
    option localservice '1'
    option filter_aaaa '1'
    option domain 'lan'

    config dhcp 'lan'
    option interface 'lan'
    option start '100'
    option limit '150'
    option leasetime '12h'

    config dhcp 'wan'
    option interface 'wan'
    option ignore '1'

    config srvhost
    option srv '_vlmcs._tcp'
    option target 'OpenWrt'
    option port '1688'
    option class '0'
    option weight '100'
    17 条回复    2021-01-08 19:26:24 +08:00
    qakito
        1
    qakito   326 天前
    uci 配置文件有提供统一的读写接口:
    Usage: uci [<options>] <command> [<arguments>]

    Commands:
    batch
    export [<config>]
    import [<config>]
    changes [<config>]
    commit [<config>]
    add <config> <section-type>
    add_list <config>.<section>.<option>=<string>
    del_list <config>.<section>.<option>=<string>
    show [<config>[.<section>[.<option>]]]
    get <config>.<section>[.<option>]
    set <config>.<section>[.<option>]=<value>
    delete <config>[.<section>[[.<option>][=<id>]]]
    rename <config>.<section>[.<option>]=<name>
    revert <config>[.<section>[.<option>]]
    reorder <config>.<section>=<position>

    Options:
    -c <path> set the search path for config files (default: /etc/config)
    -d <str> set the delimiter for list values in uci show
    -f <file> use <file> as input instead of stdin
    -m when importing, merge data into an existing package
    -n name unnamed sections on export (default)
    -N don't name unnamed sections
    -p <path> add a search path for config change files
    -P <path> add a search path for config change files and use as default
    -q quiet mode (don't print error messages)
    -s force strict mode (stop on parser errors, default)
    -S disable strict mode
    -X do not use extended syntax on 'show'
    Raos
        2
    Raos   326 天前
    sed '/local/d'
    lihuoqingfly
        3
    lihuoqingfly   326 天前
    参考手册: https://quickref.me/sed
    IgniteWhite
        4
    IgniteWhite   326 天前 via iPhone
    你还可以试试 awk 啊
    station
        5
    station   326 天前
    @Raos sed '/option domain 'lan'/d' dhcp 不行哦~
    diaryevil
        6
    diaryevil   326 天前
    @station 四个单引号上转义符啊
    zent00
        7
    zent00   326 天前
    比如删除 option rebind_localhost '1' 这一行:

    sed -i "/option rebind_localhost '1'/d" dnsmasq.conf
    IgniteWhite
        8
    IgniteWhite   326 天前 via iPhone   ❤️ 1
    看了楼主在 5 楼的代码,我只能说

    君 regex 本当上手

    另外根据你系统不一样,shell 不一样,有时候要用 sed -e,有时候对于双引号的严格性也不同。这些信息也不写在问题里……
    IgniteWhite
        9
    IgniteWhite   326 天前 via iPhone
    纠正,是-E,不是小写
    xgfan
        10
    xgfan   326 天前 via iPhone
    目测一楼才是正解
    Raos
        11
    Raos   326 天前
    @station sed "/option domain 'lan'/d"
    @zent00 正解
    Raos
        12
    Raos   326 天前
    @lihuoqingfly 收藏了
    tachikomachann
        13
    tachikomachann   326 天前 via Android
    sed 不知道,但是 vim 的话,用 g 命令可以
    :g/要匹配的关键字 /d
    aibangjuxin
        14
    aibangjuxin   326 天前
    考虑效率?
    cat a|sed -e '/./{H;$!d;}' -e 'x;/dnsmasq/!d;'|sed '/domainneeded/d'
    domainneeded 为要删除的行
    doumeki
        15
    doumeki   326 天前
    说个题外话,如果是编译之前自定义,还是写成 patch 吧。
    运行时的话使用一楼说的 uci.

    PS: 我自己写了改了几十个编译自定义文件,全是用的 patch 方式。
    hzjseasea
        16
    hzjseasea   326 天前
    cat xx | sed "/option leasefile '\/tmp\/dhcp.leases'/d"
    byaiu
        17
    byaiu   326 天前 via iPhone
    忘了-i 了吧
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2629 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:35 · PVG 22:35 · LAX 06:35 · JFK 09:35
    ♥ Do have faith in what you're doing.