我的python代码如下所示:
def one():
#lines of code
context = {
#lines of code
}
def two():
#lines of code
context = {
#lines of code
}
context.up({ #lines
})
我想在关闭大括号之前的函数二的上下文部分添加“Some new line”,如下所示:
def one():
#lines of code
context = {
#lines of code
}
def two():
#lines of code
context = {
#lines of code
Some new line
}
context.up({ #lines
})
如何使用sed做到这一点?
我尝试了以下命令:
sed -i '/^def two.*context={/,/^[[:space:]]}/{s/^\([[:space:]]*\)}/\1some new line\n&/;}' file
但它似乎没有任何改变。
答案 0 :(得分:0)
这可能适合你(GNU sed):
sed '/def two/,/^\s*context\>/!b;/^\s*context\>/!b;:a;n;/^\s*}/!ba;i some new line' file
将范围限制为def two
并在context
读取行内,直到结束}
并插入新行。
第一个sed指令是正则表达式范围,即如果行不在def two
和context
之间,则照常打印它们,但不要使用任何sed指令进一步处理它们(b
表示打破任何进一步的命令)。同样,下一个正则表达式会忽略除包含context
的行之外的所有行。从该地址打印模式空间(PS)中的当前行,并使用下一行(n
)填充PS。如果该行不包含}
跳回(ba
)到位置:a
。否则插入(i
)一些新文本,然后打印PS的内容。
保留缩进使用:
sed '/def two/,/^\s*context\b/!b;/^\s*context\b/!b;:a;n;/^\s*}/!h;//!ba;x;s/\S\+.*/some new line with indent/p;g' file