例如,我有 test.txt ,其中包含以下行:
L1〜00〜00〜00〜00〜00〜测试〜122113〜00〜L2〜这〜是〜A〜样品〜数据〜L1〜00〜00〜00〜00〜00〜测试1〜123456〜00
我想得到" 测试"和" Test1 ",两者都在L1~00~00~00~00~00~
之后,格式如下。
Test, Test1
我的bash脚本中已经有了这一行:
grep -oP 'L1(?:.[\w\s]*){5}.(\K[\w\s]*)' < test.txt
但它返回不同的格式:
Test
Test1
如何通过在脚本中添加sed
来实现此目的?我还是个新手。我希望有人可以帮助我。谢谢
答案 0 :(得分:2)
当然,如果你正在使用Perl正则表达式,你也可以直接使用Perl。
perl -nle '@m = m/L1(?:.[\w\s]*){5}.([\w\s]*)/g; print(join(",", @m)) if @m' test.txt
这会将匹配收集到@m
,然后如果@m
中有匹配项,则用逗号打印它们。 -l
选项可以方便地在print
上提供尾随换行符,-n
选项可以使Perl一次一个地循环输入行,例如sed
。
答案 1 :(得分:1)
您可以使用:
grep -oP 'L1(?:.[\w\s]*){5}.(\K[\w\s]*)' test.txt | sed 'N;s/\n/, /'
Test, Test1
答案 2 :(得分:1)
如果你不倾向于使用perl
正则表达式 - 你可以单独依靠sed
:
sed -rn 's#(L1.)((\w+.){5})(\w+)(.*\1\2)(\w+)(.*)#\4, \6#p' < test.txt
答案 3 :(得分:1)
用于多字符RS和RT的Wth GNU awk:
$ awk -v RS='L1~00~00~00~00~00~' -F~ 'NF{ORS=(RT?", ":"\n"); print $1}' file
Test, Test1
上面只是将每一行拆分为包含L1~00~00~00~00~00~
之间任何内容的记录,并将每条记录拆分为~
之间的字段,然后打印每个字段的第一个字段(即介于每个L1~00~00~00~00~00~
和下一个~
之间,如果它不是最后一条记录,则后跟,
,如果是\n
,则为 .factory('CoverageService', ['$http', function ($http) {
return{
GetCoverageReport: function () {
return $http.get('../../../js-test-reports/coverage/Chrome 43.0.2357%20(Windows%207)/cobertura-coverage.xml');
},
。