大神们 CentOS 怎么批量修改文件内容 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
solopython
V2EX    Python

大神们 CentOS 怎么批量修改文件内容

  •  
  •   solopython 2019-09-27 09:00:27 +08:00 5597 次点击
    这是一个创建于 2210 天前的主题,其中的信息可能已经有所发展或是发生改变。

    CentOS 下怎么批量修改 /var/XX/A.conf 文件中的内容,XX 是可变文件夹,要修改的配置文件 A.conf 是固定名称,要求对 A 中的多个变量值进行修改或追加变量,小弟有点 python 基础

    25 条回复    2019-09-28 09:55:30 +08:00
    no1xsyzy
        1
    no1xsyzy  
       2019-09-27 09:15:41 +08:00
    一般不是写作 /var/*/A.conf 或者 /var/**/A.conf 么?
    因此,看得出你没有 Unix 基础。

    另外,准备用 python 了还不简单?我还以为你想用 awk/sed 呢
    guxingke
        2
    guxingke  
       2019-09-27 09:15:43 +08:00 via Android
    有锤子 有钉子 锤就是了
    mikeguan
        3
    mikeguan  
       2019-09-27 09:16:38 +08:00 via Android
    1.用*通配目录,sed 直接修改文件
    2.目录太多的话,可以先 find 然后 sed 进行修改
    3.用 Python 遍历目录读文件修改应该也行
    loading
        4
    loading  
       2019-09-27 09:16:39 +08:00
    walk 一遍目录,判断文件名就行,都 python 了。
    lihongjie0209
        5
    lihongjie0209  
       2019-09-27 09:18:26 +08:00
    find | sed
    XSG
        6
    XSG  
       2019-09-27 09:24:35 +08:00
    ```
    sed -i 's/aaa/bbb/g' `find /var/ -name A.conf`
    ```
    solopython
        7
    solopython  
    OP
       2019-09-27 09:27:35 +08:00
    @no1xsyzy XX 是有固定前缀的一些文件夹,不是所有的文件夹
    Techzero
        8
    Techzero  
       2019-09-27 09:30:48 +08:00 via Android
    @solopython 那就 /var/XX*/ 呗
    no1xsyzy
        9
    no1xsyzy  
       2019-09-27 10:41:21 +08:00
    有这提问题的时间( 1.5 小时)代码已经写好了
    MyPassWordis
        10
    MyPassWordis  
       2019-09-27 10:44:23 +08:00
    @XSG #6 pipline 和 subshell 哪个好点?一直习惯用管道,还真不怎么这么写
    solopython
        11
    solopython  
    OP
       2019-09-27 12:42:07 +08:00
    @loading 怎么替换文件中指定的变量名及其值?
    solopython
        12
    solopython  
    OP
       2019-09-27 14:19:10 +08:00
    @no1xsyzy 知道啥叫抛砖引玉吗
    henices
        13
    henices  
       2019-09-27 14:22:47 +08:00
    用 perl 吧, 不要忘记这个老东西。
    no1xsyzy
        14
    no1xsyzy  
       2019-09-27 14:54:07 +08:00   1
    @solopython 我不明白你抛的是啥砖引的是啥玉
    你一块砖都没抛出来,抛个问题当自己抛砖?
    抛砖引玉也不该在 Python 节点里
    neroxps
        15
    neroxps  
       2019-09-27 15:26:31 +08:00
    楼主的意思是还需要解析每一个 conf 文件?

    这样就上 python 或者 bash 就是了,两大运维工具想咋搞都行
    blackeeper
        16
    blackeeper  
       2019-09-27 15:31:12 +08:00
    懂 shell,那么 find | xargs | sed 搞定
    懂 python,work 遍历一遍就可以了
    loading
        17
    loading  
       2019-09-27 15:56:13 +08:00 via Android
    @solopython 正则表达式
    solopython
        18
    solopython  
    OP
       2019-09-27 16:25:32 +08:00
    不出力,还屁话多,鄙视你
    solopython
        19
    solopython  
    OP
    &nsp;  2019-09-27 16:35:25 +08:00   1
    @loading @blackeeper walk 搞定,3Q

    import os
    import re

    list=[]
    for root,dirs,files in os.walk("/var/",topdown=False):
    for name in files:
    if name.startswith("A.conf"):
    list.append(os.path.join(root,name))

    for a in list:
    with open(a,'r+') as f:
    data = f.read()
    f.seek(0)
    f.write(re.sub(r"model(.*)","model=4",data))
    f.truncate()
    TimePPT
        20
    TimePPT  
    PRO
       2019-09-27 16:52:22 +08:00
    如果用 Python3,可以试试 pathlib,比 os.path 好使很多
    bobylive
        21
    bobylive  
       2019-09-27 16:57:20 +08:00
    https://github.com/noqcks/gucci

    很多做 Docker Image 的都在用,具程序法的配置文件理。
    TimePPT
        22
    TimePPT  
    PRO
       2019-09-27 17:05:39 +08:00
    Foreverdxa
        23
    Foreverdxa  
       2019-09-27 19:51:04 +08:00
    我至少可以用 4 中语言给你实现
    Neveroldmilk
        24
    Neveroldmilk  
       2019-09-28 09:51:15 +08:00
    用 shell 命令,别用 python。
    realpg
        25
    realpg  
    PRO
       2019-09-28 09:55:30 +08:00
    @solopython #12
    你这不叫抛砖引玉 叫懒
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2661 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 15:23 PVG 23:23 LAX 08:23 JFK 11:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86