python + 在 python 中运行 sed 命令

python + run sed command in python

提问人:Judy 提问时间:9/1/2023 更新时间:9/1/2023 访问量:67

问:

我创建了 python3 模块文件 ( ) ,其中包括将字符串替换为 new 的 Linux 命令,例如 - 键 - 和值)sed_util_conf.pysedhttp-server.https.port

def run_cli(action_details, command_to_run):
    print(action_details)
    print(command_to_run)
    errCode = os.system(command_to_run)
    if errCode != 0:
        print('failed, ' + command_to_run)
        sys.exit(-1)
    print(action_details + ' - action done')


def replace_line_do(File, OLD, NEW):
.
.
.

run_cli('run_sed_cli', f'sed -ie s/^{OLD}/{NEW}/  {File}')

在其他 python3 脚本上,我使用了以下 python3 语法,以便将“”替换为新的”OLDNEW"

 sed_util_conf.replace_line_do(f'{file_path}', 'http-server.https.port=.*', f'http-server.https.port={val}')

例:

 sed_util_conf.replace_line_do(f'/etc/zomer_app/conf/config.zomer', 'http-server.https.port=.*', f'http-server.https.port={val}')

脚本正在工作,并在文件中用 NEW 字符串更改了 OLD 字符串,但另外我们得到了另一个以”e"

例如

如果我们替换了文件上的行 -/etc/zomer_app/conf/config.zomer

然后我们得到两个文件

/etc/zomer_app/conf/config.zomer
/etc/zomer_app/conf/config.zomere

原因是 syntx 中的“”字符——erun_cli('sed', f'sed -ie s/^{OLD}/{NEW}/ {File}')

从 SED 手册页 “” 表示”ee script, --expression=script , add the script to the commands to be executed "

但我不明白这个“”是如何创建附加文件的 - ?esed/etc/zomer_app/conf/config.zomere

python-3.x Linux sed

评论

0赞 Paolo 9/1/2023
你为什么要使用 sed?你不能在python中做到这一点吗?
0赞 Judy 9/1/2023
如果可以的话,我很乐意得到例子
1赞 HatLess 9/1/2023
您获得附加文件的原因是,在 in 标志之后,您向 sed 添加了隐含,以创建具有相似名称的备份文件,并区分备份并对原始文件进行就地更改。e-iee

答:

1赞 pygri 9/1/2023 #1

您应该将 替换为 。-ie-i -e

不能一个接一个地堆叠选项。

评论

0赞 Judy 9/1/2023
好的,但仍然不明白为什么我们有以“e”结尾的额外文件,顺便说一句,正如我们有时看到的那样,文件是空的
1赞 pygri 9/1/2023
好吧,由 sed 来解释您的命令行参数 - 我只会修复语法,而不用担心它如何处理用户输入中的边缘情况......
0赞 stevesliva 9/1/2023
-ie应该与 GNU sed 一起使用。这是在 Mac 上运行的吗?另一个选项可能是显式使用 .基于其他 mac 问题。gsed
0赞 Judy 9/3/2023
我们在 RHEL 7.9 版本上运行 python 脚本