shell脚本或grunt工具,按照规则删除文件中的行



好的,所以我有一个巨大的文件,它导致了很多文件的串联。

这并不重要,但它是由3个谷歌闭包依赖文件和许多单元测试文件组成的汇编。

我的问题是,每个单元测试文件都需要一些闭包模块,因为它们现在都在同一个文件中,所以当我用phantomjs运行它时,需要多次相同的依赖项
我需要的是一个脚本,它遍历文件,并删除重复的以goog.require(.)开头的行(在第一行之后)

因此,规则是:

  • goog.require(开头
  • 完全相同的行(忽略尾部和前面的空格)存在于

示例:

goog.provide( "app.tests.mvc.PMVCUnitTestBootstrap" );
goog.require( "app.tests.mvc.jsunit" );
goog.require( "app.Bootstrap" );
goog.require( "pmvc.patterns.observer.Observer" );
goog.require( "app.tests.mvc.ApplicationResources" );
goog.require( "app.notifications.SystemNotes" );
goog.require( "lib.puremvc.definitions.notifications.NotificationMapper" );
goog.require( "lib.puremvc.definitions.notifications.NotificationMap" );
...
...
...
goog.require( "app.tests.mvc.jsunit" ); //this line is repeated
goog.require( "app.Bootstrap" ); //this line is repeated
goog.require( "lib.unittests.helpers.ExpectedFailures" );
goog.require( "lib.filesystem.ConstructableFile" );
goog.require( "lib.filesystem.FileReference" );
goog.require( "lib.utils.ArrayUtil" );
goog.require( "easy.util.GUIDUtil" );
...
...

将成为

 goog.provide( "app.tests.mvc.PMVCUnitTestBootstrap" );
 goog.require( "app.tests.mvc.jsunit" );
 goog.require( "app.Bootstrap" );
 goog.require( "pmvc.patterns.observer.Observer" );
 goog.require( "app.tests.mvc.ApplicationResources" );
 goog.require( "app.notifications.SystemNotes" );
 goog.require( "lib.puremvc.definitions.notifications.NotificationMapper" );
 goog.require( "lib.puremvc.definitions.notifications.NotificationMap" );
 ...
 ...
 ...
 goog.require( "lib.unittests.helpers.ExpectedFailures" );
 goog.require( "lib.filesystem.ConstructableFile" );
 goog.require( "lib.filesystem.FileReference" );
 goog.require( "lib.utils.ArrayUtil" );
 goog.require( "easy.util.GUIDUtil" );
 ...
 ...

欢迎提供任何帮助

获取所有以goog.require 开头的唯一字符串

grep '^goog.require' yourfile.txt | sort -u > uniq_require.txt

然后从源中删除所有谷歌需求

sed -i '/^goog.require/d' yourfile.txt

然后连接结果

cat uniq_require.txt yourfile.txt > result.txt

没有测试,只是擦伤。

最新更新