我在文本文件中有以下代码:
def test_one():
'''
Test case steps:
step1: STEP1
step2: STEP2
'''
x = "this"
assert 'h' in x
def test_two():
'''
Test case steps:
step3: STEP3
step4: STEP4
'''
x = "this"
assert 'h' in x
我需要使用测试用例名称获取步骤,使用sed来获取模式
sed -n -e "/'''/,/'''/p" test_create_doc.py
使用sed之后:
'''
Test case steps:
step1: STEP1
step2: STEP2
'''
'''
Test case steps:
step3: STEP3
step4: STEP4
'''
需要比赛前一行,预期输出如下: 我需要在匹配模式前排一行。
test_one
'''
Test case steps:
step1: STEP1
step2: STEP2
'''
test_two
'''
Test case steps:
step3: STEP3
step4: STEP4
'''
请让我知道如何在模式匹配之前取一行。
答案 0 :(得分:0)
这是一个快速修复方法,您可以在sed中匹配多个模式
sed -n -e "/def/,//p" -e "/'''/,/'''/p" test_create_doc.py
示例输出
def test_one():
'''
'''
Test case steps:
step1: STEP1
step2: STEP2
'''
def test_two():
'''
'''
Test case steps:
step3: STEP3
step4: STEP4
'''
PS:可能会有更好的方法来实现您在此处尝试的目标。 也许看看pydocs以及如何生成它们
答案 1 :(得分:0)
这在Awk中简单易懂。
awk "/'''/,/'''/ { if(p) { print p; p='' } print }
{ p = $2; sub(/\\(.*/, '', p) }" file
Awk脚本通常在单引号内,但是在这种情况下,双引号很方便,并且只需要将一个双反斜杠加倍(在双引号内,shell会弄乱美元符号,反斜杠和反斜杠)如果您需要在单引号内的Awk字符串中放置一个单引号,请使用八进制转义\047
)。
我确信这在sed
中是可能的;但我不想记录和维护该脚本。