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 · 4609 次点击
    这是一个创建于 1101 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
       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  
       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  
       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  
       2019-09-28 09:55:30 +08:00
    @solopython #12
    你这不叫抛砖引玉 叫懒
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1649 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 01:22 · PVG 09:22 · LAX 18:22 · JFK 21:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.