【发布时间】:2021-08-29 12:52:13
【问题描述】:
正如问题标题所指定的,我必须用新的文本块替换文件中的文本块
我已经到处寻找这个东西,但我找到的每一个解决方案都对这个问题来说太具体了。难道不能创建一个灵活/可重用的函数吗?
要非常具体,我需要一些具有类似选项的东西
1) File ( where changes are to be done )
2) Exiting block of text
3) New block of text
( 2nd & 3 option could be either as manually pasted text or cat $somefile)
我可以更改这 3 个并将脚本用于所有文本块替换的情况,我相信它也会帮助许多其他人
例如,目前我需要用底部的一个文本块替换下面的文本块,并说文件是 $HOME/block.txt 。虽然我需要上面提到的易于重复使用/灵活的解决方案
- name: Set default_volumes variable
set_fact:
default_volumes:
- "/opt/lidarr:/config"
- "/opt/scripts:/scripts"
- "/mnt:/mnt"
- "/mnt/unionfs/Media/Music:/music"
- name: Set default_volumes variable
set_fact:
default_volumes:
- "/opt/lidarr:/config"
- "/opt/scripts:/scripts"
- "/mnt:/mnt"
- "/mnt/unionfs/Media/Music:/music"
- "/mnt/unionfs/downloads/lidarr:/downloads-amd"
PS / 替换时我需要保留间距和缩进。
【问题讨论】:
-
一个天真的解决方案是 a) 将文件读入变量 b) 用
s{\$original_text}{$replacement_text}s进行替换 c) 将更改后的变量保存到文件中。在给定文件名、原始文本和替换文本的情况下,创建一个非常短的函数非常简单。 -
@SteffenUllrich 你的意思是
{\Q$original_text}而不是{\$original_text} -
@Sundeep:是的,当然。感谢您纠正我。
-
这看起来像 YAML。因此,最好的方法是 a) 将 YAML 读入 Perl 数据结构(使用 YAML.pm),b) 以您需要的任何方式更改 Perl 数据结构,c) 将数据结构转换回 Perl 并写入一个文件。
-
这是YAML,最好使用该数据格式的库进行处理
标签: perl awk yaml text-processing