从目录中的一组文件中删除一组相同的行

用户394

我有一个drupal网站,该网站将其配置导出到yaml文件中。对于它的Web表单组件,我们有大约200个Web表单,这些表单将密件抄送提交到内部电子邮件地址,以进行跟踪

我们想从所有Web表单中删除该电子邮件,最简单的方法是从yaml配置文件中删除它,然后重新导入它们。

因此,我当前的工作流程是打开其中一个文件,找到具有的行,email_webdev:然后将其删除,然后删除接下来的42行,保存文件,打开下一个,清洗,重复约200个文件。

我正在寻找一种单行代码或脚本,该脚本或脚本将自动从出现它们的所有文件中删除一组相同的42行的有序集合。

技术说明

在我们的config目录中,有大约200个文件,我要从中删除相同的行集:

$ ls webform.webform.*
webform.webform.incoming_student_housing_applica.yml
webform.webform.info_for_students.yml
webform.webform.info_request_for_viewbook.yml
webform.webform.inquire_about_a_project.yml

每个Webform配置yaml都是几百行配置数据,以基本格式缩进。以下是示例示例摘录,其中包含前导行号:

....
170   test:
171     roles: {  }
172     users: {  }
173     permissions: {  }
174   configuration:
175     roles: {  }
176     users: {  }
177     permissions: {  }
178 handlers:
179   email_webdev:
180     id: email
181     label: 'Webdev Email'
182     handler_id: webdev_email
183     status: true
184     conditions: {  }
185     weight: 0
186     settings:
... 
214       parameters: {  }
215 variants: {  }
216 uuid: 6073470f-bb3b-40ad-8440-a7cb5f3be4d2

上面摘录中第179-214行的42行节是我要从此目录中的200多个文件中删除的。因此,我正在手动执行的操作是在vim中删除行179-214,然后保存。结果看起来像这样:

...
170   test:
171     roles: {  }
172     users: {  }
173     permissions: {  }
174   configuration:
175     roles: {  }
176     users: {  }
177     permissions: {  }
178 handlers:
179 variants: {  }
180 uuid: 6073470f-bb3b-40ad-8440-a7cb5f3be4d2

这是42行。这42行在文件之间将完全相同,并且顺序完全相同,但是节将从文件中的不同位置开始。例如,在一个文件中,它可以从1068行开始,在另一个文件中,它可以从872开始。

$ grep -n email_webdev *
webform.webform.404.yml:183:  email_webdev:
webform.webform.accommodations_letter_request_fo.yml:219:  email_webdev:
webform.webform.agency_survey.yml:219:  email_webdev:
...

我能弄清楚的是,使用grep开关-A在模式匹配后找到行:

$ grep -A42  email_webdev *
webform.webform.volunteer_sign_up.yml:  email_webdev:
webform.webform.volunteer_sign_up.yml-    id: email
webform.webform.volunteer_sign_up.yml-    label: 'Webdev Email'
webform.webform.volunteer_sign_up.yml-    handler_id: webdev_email
webform.webform.volunteer_sign_up.yml-    status: true
webform.webform.volunteer_sign_up.yml-    conditions: {  }
webform.webform.volunteer_sign_up.yml-    weight: 0
webform.webform.volunteer_sign_up.yml-    settings:
...

因此,这些是我要从该文件(以及目录中的所有文件)中删除的行但是,我不能仅使它删除该行id: email,因为这会出现在其他电子邮件回复中,我也不能仅进行模式化匹配任何其他行,例如weight: 0,几乎也出现在所有其他元素中,并且conditions: { }他们只能在此节中的行开始,该节以开头email_webdev:,并在每个文件中相同地继续进行下42行。

有没有更简单的方法可以做到这一点?

卡西莫多

请先尝试此操作mv,然后检查.out创建的新文件是否完全符合您的要求。重新启用该mv操作以覆盖原始文件。

for file in webform.webform.*; do
    awk '/^  email_webdev:$/{n=42}{if(!n){print}else{n--}}' "$file" > "$file.out"
    mv -- "$file.out" "$file"
done

awk脚本检测到的行与此完全相同

  email_webdev:

即,两个空格,,email_webdev:行尾字符。

一旦检测到该行,它将设置为n=42,从而停止打印该行,然后仅在计数了42行之后才再次开始打印。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何删除目录中的一组特定的.png文件?

来自分类Dev

删除上一组中的行

来自分类Dev

如何从文件中删除一组行?

来自分类Dev

从 Perl 文件中删除一组行

来自分类Dev

删除R中一组行中的某些行

来自分类Dev

删除文本文件中的一组数据

来自分类Dev

sed:从一组文件中删除路径列表

来自分类Dev

希望从 .txt 文件中删除一组字符

来自分类Dev

从唯一组中删除单个行-Oracle

来自分类Dev

同一组中的文件权限

来自分类Dev

在Rails中创建一组行

来自分类Dev

一组中的总和

来自分类Dev

匹配gsub中的一组数字,但以“ /”符号开头时则排除一组相同的数字

来自分类Dev

如何用C中的一组目标文件编译一组C文件

来自分类Dev

熊猫将一组中的行与上一组中的行进行比较

来自分类Dev

在一组 pdf 文件中查找单词或一组单词

来自分类Dev

对同一组中的多个集合使用相同的模板

来自分类Dev

如何从Racket中的文件中读取一组数据?

来自分类Dev

删除一组浮动按钮中的边距

来自分类Dev

从字符向量中删除一组单词

来自分类Dev

从多个表中删除同一组值

来自分类Dev

如何从单元阵列中删除特定的一组单元?

来自分类Dev

如何在Swift中删除一组节点?

来自分类Dev

C ++删除一组列表中的重复项

来自分类Dev

从唯一组中删除单行-Oracle

来自分类Dev

从链接中删除一组特定的数据

来自分类Dev

在PostgreSQL中的表中插入一组行

来自分类Dev

获取一组重复行中的最新行

来自分类Dev

如何遍历子目录中的一组文件并对它们进行操作