Sed匹配过去的换行符

时间:2019-04-07 02:56:01

标签: python sed jupyter multiline

我正在尝试使用sed查找和替换eval_config: {.*}的多行正则表达式模式。

我有一个文本文件,其中包含以下内容:

eval_config: {
  <variable number of lines and contents>
}

我想用这样的东西替换它:

eval_config: {
  <completely different variable number of lines and contents>
}

那么我该如何匹配和替换呢?使用:

sed -i 's/eval_config: {.*\+}/replacement_text/g' filename似乎停在换行符上。


详细信息:

我正在从Jupyter笔记本单元中使用sed并将新的eval_config构造为python多行字符串,如下所示:

filename = 'file.txt'
new_eval_config_example = '''eval_config: {{
  metrics_set: {}
  use_moving_averages: false
  num_examples: {}
}}'''.format(metrics_set, val_count)

!sed -i '/eval_config: .*\+/{re.escape(new_eval_config_example)}/g' {filename}

更新

  • <variable number of lines and contents>将不包含}
  • 它不会包含嵌套的eval_config
  • 终止}将始终保持一行

2 个答案:

答案 0 :(得分:1)

这可能是最简单的方法:

sed '/^eval_config: {/,/^}/c\
replacement\
more replacement' data.txt

答案 1 :(得分:0)

在gnu sed上尝试

render