2017-04-06 75 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' 
相關問題