2017-04-06 116 views
-1

我试图检索{{| translate之间的文本。在mac上使用grep提取特殊字符之间的字符串

输入: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塞拉利昂,版本10.12.4这样做。谢谢!

+0

如果你可以安装GNU的grep,它会很容易地得到所需要的结果 – RomanPerekhrest

+0

您能在答案提供反馈下面如果它帮助你? – Inian

回答

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 
+0

它工作正常。我将其扩展为在一个文件夹上运行并将其保存到文件“find/Users/my_app/src -type f -name”*。html“-exec awk -F'[{}]''{split($(NF-2),array,”|“); print array [1]}'alltranslatewords.txt' – manvi77

+0

做到了:喜欢你的评论:)并感谢你的帮助,你能帮我得到如上所示: – manvi77

+0

我得到了这个'awk:试图访问超出范围字段-1'。这是什么意思? – manvi77

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' 
相关问题