我正在尝试使用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
}
将永远是独立的这可能是最简单的方法:
sed '/^eval_config: {/,/^}/c\
replacement\
more replacement' data.txt
尝试过gnu sed
r='replacement_text'
sed -E "/eval_config:\s*\{/ {N;s/\n[^\}]+/\n<$r>/}" filename