我正在尝试在{{
和| translate
之间检索文字。
输入:testfile.txt
views/range.html: <button type="button" class="btn" ng-click="setRange(7 * 24 * 3600 * 1000)">{{ '7 days' | translate }}</button>
views/widget.html: <span class="state">{{phase}}/2</span> {{titles[phase-1] | translate}}
views/directives/widget.html: <button class="btn" ng-disabled="selectedWidgets.length === 0" ng-click="phase = 2">{{ 'Next' | translate }}</button>
预期结果:
'7 days'
titles[phase-1]
'Next'
到目前为止尝试过:
grep "translate" | grep -o "'[^']*'" testfile.txt
#results
'7 days'
'Next'
grep '{\{\(.*\)|\translate%\1%' testfile.txt
#results
grep: invalid repetition count(s)
awk -F '{{|translate' '{print $2}' testfile.txt
#results
'7 days' |
phase}}/2</span>
'Next' |
我在macOS Sierra上执行此操作,版本10.12.4。谢谢!
答案 0 :(得分:1)
您可以使用此awk
进行此提取,
awk -F'[{}]' '{split($(NF-2),array,"|"); print array[1]}' file
'7 days'
titles[phase-1]
'Next'
我们的想法是将字段分隔符设置为{}
,以便我们可以从文件中访问{}
中的字段。所以$(NF-2)
代表倒数第二个字段,它包含像
'7 days' | translate
titles[phase-1] | translate
'Next' | translate
在上述行中,如果我们将split()
函数与|
去限制器一起使用,则第一个分割字段值将包含我们要查找的值。
OP希望将awk
命令应用于文件夹中的所有html
文件,可以将其作为
for file in /Users/my_app/src/*.html; do
awk -F'[{}]' '{split($(NF-2),array,"|"); print array[1]}' "$file" >> alltranslatewords.txt
done
答案 1 :(得分:0)
BSD grep (在OSX上)不支持-P (--perl-regex)
。
使用以下 perl 方法:
perl -nle 'print $1 if m{> ?\{\{\s*([^|\}]+?)\s*\| translate}' testfile.txt
-n
选项 - 使Perl假定你的程序有以下循环,这使得它迭代文件名参数,有点像sed -n或awk:
-l
选项 - 启用自动行结束处理
-e
选项 - 允许您在命令行上指定一行代码。
print $1
- 打印第一个捕获组,即([^|\}]+?)
输出:
'7 days'
titles[phase-1]
'Next'