在python文件中查找并替换字符串

2024-10-01 00:35:37 发布

您现在位置:Python中文网/ 问答频道 /正文

命令输出:

   veera:~ # blkid
   /dev/sda1: UUID="41b8736f-5a43-4938-8b38-8df62fba50d7" TYPE="swap"
   /dev/sda2: UUID="3717cca6-cbb7-4763-a935-6e01dfa1f83c" TYPE="ext3"

  file output:
  veera:~ # cat /etc/fstab
  /dev/sda1            swap                 swap       defaults              0 0
  /dev/sda2            /                    ext3       acl,user_xattr        1 1

有谁能帮我们把/etc/fstab文件中的/dev/sda1替换成uuid吗。你知道吗

文件替换后,应如下所示:

veera:~ # cat /etc/fstab
UUID=41b8736f-5a43-4938-8b38-8df62fba50d7            swap                 swap       defaults              0 0
UUID=3717cca6-cbb7-4763-a935-6e01dfa1f83c            /                    ext3       acl,user_xattr        1 1

Tags: devuuidtypeetccatacldefaultsfstab
2条回答

由于您使用的是Linux操作系统,下面是使用awk工具的一行程序:

awk -F' |: ' 'NR==FNR{ a[$1]=$2; next } $1 in a { $1=a[$1]; print }' <(blkid) /etc/fstab

输出:

UUID="41b8736f-5a43-4938-8b38-8df62fba50d7"            swap                 swap       defaults              0 0
UUID="3717cca6-cbb7-4763-a935-6e01dfa1f83c"            /                    ext3       acl,user_xattr        1 1

我根据问题要求编写了替换字符串的代码。你知道吗

请验证并让我知道有没有更好的方法来实现这一点

import subprocess
proc = subprocess.Popen('blkid', stdout=subprocess.PIPE)
tmp = proc.stdout.read()

d = {}
for line in tmp.split("\n"):
        if ":" not in line:
                continue
        key,value = line.strip().split(":", 1)
        d[key] = value
with open('/etc/fstab', 'r') as file:
        filedata = file.read()
for k, v in d.iteritems():
        for line in filedata.split("\n"):
                if k in line:
                        data = v.strip().split(" ")
                        data = data[0].replace("\"","")
                        filedata = filedata.replace(k, data)
with open('/etc/fstab', 'w') as file:
        file.write(filedata)

相关问题 更多 >