【问题标题】:Sed Delete first line of every file that ends has .jsx extensionsed 删除每个以 .jsx 扩展名结尾的文件的第一行
【发布时间】:2015-10-03 04:51:21
【问题描述】:

因此,在 React 0.12 中,不再需要在所有 jsx 文件的顶部使用 /** @jsx React.DOM */。我正在使用的库在看到每个 jsx 文件顶部存在的 /** @jsx React.DOM */ 行时实际上会引发错误。

所以我想知道是否有一种快速的方法可以使用 sed 从目录中的每个文件中删除这一行。

我应该只删除第 1 行,还是有办法让我进行模式匹配,并验证它是否位于顶部?另外,如何从目录中的所有文件及其子目录中递归删除它?

谢谢!

【问题讨论】:

标签: linux shell sed


【解决方案1】:

是的,在find 的帮助下很简单。以下命令行是所有 *.jsx 文件的第一行:

find /path/to/files -name '*.jsx' -exec sed -i '1d' {} \;

此命令删除包含该特定注释的行:

find /path/to/files -name '*.jsx' -exec sed -i '/^\/\*\* @jsx React\.DOM \*\/$/d' {} \;

在发出该命令之前备份您的文件,因为它们会修改文件。安全总比后悔好。

【讨论】:

  • 为了 100% 的安全,你应该真正逃避正则表达式中的 *s 和 . - /\/\*\* @jsx React\.DOM \*\// 甚至可能适合锚定它 /^\/\*\* @jsx React\.DOM \*\/$/ 如果这是全部的话行。
  • @EdMorton 确实!你说的对。我想到*sed 中用作量词时,没有通过-r,需要转义。我应该责怪,因为你让我使用更多awk 而更少使用sed。 :) 你看,我对sed 的了解已经生锈了!
猜你喜欢
  • 2016-11-06
  • 2017-03-07
  • 2020-04-02
  • 2018-10-27
  • 2011-10-01
  • 1970-01-01
  • 2017-12-16
  • 2011-09-18
  • 1970-01-01
相关资源
最近更新 更多