Shell 使用linux命令删除包含搜索模式的行之前的行
我有一个包含单词和一些字符的yaml文件。Shell 使用linux命令删除包含搜索模式的行之前的行,shell,sed,text-parsing,Shell,Sed,Text Parsing,我有一个包含单词和一些字符的yaml文件。 版本:“5.0.0” 迁移配置: - 名称:“SchemaMigrator” 订单:1 参数: 位置:“步骤1” 模式:“身份” - 版本:“5.1.0” 迁移配置: - 名称:“IdentityDataCleaner” 订单:1 参数: 模式:“身份” - 名称:“SchemaMigrator” 订单:2 参数: 位置:“步骤1” 模式:“身份” - 名称:“RegistryDataMigrator” 订单:6 参数: 架构:“嗯” 我只需要删除
版本:“5.0.0”
迁移配置:
-
名称:“SchemaMigrator”
订单:1
参数:
位置:“步骤1”
模式:“身份”
-
版本:“5.1.0”
迁移配置:
-
名称:“IdentityDataCleaner”
订单:1
参数:
模式:“身份”
-
名称:“SchemaMigrator”
订单:2
参数:
位置:“步骤1”
模式:“身份”
-
名称:“RegistryDataMigrator”
订单:6
参数:
架构:“嗯”
我只需要删除名称:“RegistryDataMigrator”
之前的破折号(-)。有很多破折号,我只想删除最后一个
有什么想法吗?我刚从
这对我很有用 我刚刚从你的网站上找到了这个答案 这对我很有用 这可能适合您(GNU-sed): 使用
N;…;在整个文件长度上创建一个两行窗口;。。。;PD
方法,如果窗口的最后一行包含RegistryDataMigrator
,则不打印窗口的第一行。这可能适用于您(GNU-sed):
使用N;…;在整个文件长度上创建一个两行窗口;。。。;P方法,如果窗口的最后一行包含注册表数据迁移器,则不打印窗口的第一行
sed -i -n '/RegistryDataMigrator/{x;d;};1h;1!{x;p;};${x;p;}' /home/user1/Documents/migration.yaml
sed 'N;/RegistryDataMigrator[^\n]*$/!P;D' file