sed shell命令转换为Python脚本[重复]

zysjyyx4  于 2023-01-26  发布在  Shell
关注(0)|答案(1)|浏览(119)

此问题在此处已有答案

sed and rev shell command into Python script [duplicate](1个答案)
昨天关门了。
有一个shell命令,我正在尝试把逻辑转换成python。但是我不知道该怎么做,我需要一些帮助。
shell命令如下所示:

cd ../../../tests/src/main/java
ls
grep -R "@Test" -A 1 | grep void | while read LINE
do
    CLASS=`echo $LINE | cut -f1 -d"." | sed s/"\/"/"\."/g`
    TEST_CASE=`echo $LINE | sed s/"void "/

该逻辑位于目录中,逐个读取文件名,包括所有子文件夹,然后列出文件匹配项。
grep -R“@测试”-A 1|grep void转换为逐行阅读文件。如果行与@Test匹配,则读取下一行,如果下一行中有“void”,则执行此操作
我尝试了类似下面的方法,但是我不知道sed命令的确切作用以及如何将其转换为python脚本。

CLASS=`echo $LINE | cut -f1 -d"." | sed s/"\/"/"\."/g`
TEST_CASE=`echo $LINE | sed s/"void "/

为了检索发送到参数CLASS和TEST_CASE的数据,我做了剪切,但我不知道如何做sed

for root, dirs, files in os.walk(../../../tests/src/main/java):
    for file in files:
        with open(os.path.join(root, file), encoding="utf8", errors='ignore') as f:
            for line in f:
                nextLine = next(f)
                if "@Test" in line:
                    if "void" in nextLine:
                        CLASS = nextLine.split(",")[0]    // How to apply the sed here?
                        TEST_CASE = nextLine // How to apply the sed here?

任何帮助都将不胜感激

qrjkbowd

qrjkbowd1#

以下是将shell命令转换为Python脚本的一种可能方法:

import os

path = "../../../tests/src/main/java"
for root, dirs, files in os.walk(path):
    for file in files:
        with open(os.path.join(root, file), encoding="utf8", errors='ignore') as f:
            lines = f.readlines()
            for i, line in enumerate(lines):
                if "@Test" in line:
                    if "void" in lines[i+1]:
                        # Use .replace() method to replace "/" with "."
                        CLASS = lines[i+1].split(",")[0].replace("/", ".")
                        # Use .replace() method to remove the word "void"
                        TEST_CASE = lines[i+1].replace("void ", "")

--此脚本首先遍历路径“../../../tests/src/main/java”中的所有目录、子目录和文件,然后读取每个文件的内容,并检查每行是否包含“@Test”。
如果包含,则读取下一行,并检查其中是否包含“void”。如果包含,则使用.split()方法检索该行的第一个元素,该元素由“,"分隔,然后用“.”替换“/”以获取CLASS的值。然后使用.replace()方法从nextLine中删除单词“void”以获取TEST_CASE的值。

相关问题