0

由于 mocha-lcov-mocha 破坏文件路径的已知概率,我需要修复看起来像这样的当前输出路径:

SF:Vis/test-Guid.coffee
SF:Vis/Guid.coffee
SF:Vis/test-Vis-Edge.coffee
SF:Vis/Vis-Edge.coffee

进入

SF:test/Vis/test-Guid.coffee
SF:src/Vis/Guid.coffee
SF:test/Vis/test-Vis-Edge.coffee
SF:src/Vis/Vis-Edge.coffee

我对 sed 不是很好,但我可以使用:

mocha -R mocha-lcov-reporter _coverage/test --recursive | sed 's,SF:,SF:src/,' | sed s',SF.*test.*,SF:test//&,' | sed s',/SF:,,' | sed s',test/src,test,' | ./node_modules/coveralls/bin/coveralls.js

这基本上是按顺序执行 4 个 sed 命令

sed 's,SF:,SF:src/,' 
sed s',SF.*test.*,SF:test//&,'
sed s',/SF:,,' 
sed s',test/src,test,' 

我的问题是是否有办法处理这个 sed 命令,或者使用另一个 osx/linux 命令行工具

4

4 回答 4

1

最初在每个“:”之后放置“src/”,然后如果在该行上找到“test”,则将“src”替换为“test”:

$ sed 's,:,:src/,;/test/s,src,test,' file
SF:test/Vis/test-Guid.coffee
SF:src/Vis/Guid.coffee
SF:test/Vis/test-Vis-Edge.coffee
SF:src/Vis/Vis-Edge.coffee
于 2015-01-01T22:19:00.237 回答
0

Here is an awk version:

awk -F: '/SF/ {$0=$1FS (/test/?"test/":"src/")$2}1' file
SF:test/Vis/test-Guid.coffee
SF:src/Vis/Guid.coffee
SF:test/Vis/test-Vis-Edge.coffee
SF:src/Vis/Vis-Edge.coffee

How it works:

awk -F: '                               # Set field separator to ":"
/SF/{                                   # Does line start with "SF"?
    $0=$1FS (/test/?"test/":"src/")$2   # Recreat String by adding "test" if line contains "test", else "src"
    }
1                                       # Print all lines
' file                                  # read the file
于 2015-01-02T06:55:44.713 回答
0

sed 命令

 sed '\#test#!{s#SF:Vis/#SF:src/Vis/#g};\#SF:Vis/test#{s#SF:Vis/test#SF:test/Vis/test#g};' my_file
于 2015-01-01T22:28:23.687 回答
0

可以将所有 sed 命令放在一个文件中,每个命令一行,然后使用“sed -e script ”。但是,如果您只想在单个命令行上使用它,请用分号分隔。这对我有用:

sed 's,SF:,SF:src/,;s,SF.*test.*,SF:test//&,;s,SF:,,;s,test/src/,test,'
于 2015-01-01T21:41:07.997 回答