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

2019-09-27 09:00:27 +08:00
solopython  solopython

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

5311 次点击
所在节点   Python  Python
25 条回复
no1xsyzy
no1xsyzy
2019-09-27 09:15:41 +08:00
一般不是写作 /var/*/A.conf 或者 /var/**/A.conf 么?
因此,看得出你没有 Unix 基础。

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

这样就上 python 或者 bash 就是了,两大运维工具想咋搞都行
blackeeper
blackeeper
2019-09-27 15:31:12 +08:00
懂 shell,那么 find | xargs | sed 搞定
懂 python,work 遍历一遍就可以了
loading
loading
2019-09-27 15:56:13 +08:00
@solopython 正则表达式
solopython
solopython
2019-09-27 16:25:32 +08:00
不出力,还屁话多,鄙视你
solopython
solopython
2019-09-27 16:35:25 +08:00
@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
2019-09-27 16:52:22 +08:00
如果用 Python3,可以试试 pathlib,比 os.path 好使很多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/604644

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX