2014-12-05 58 views
1

有沒有什麼方法可以在使用bash的文件中查找字符串如XXXX-XXXX-XXXX(其中X是數字和字母)?在使用bash的文件中查找字符串XXXX - XXXX - XXXX

例如:我有一個文本文件中的AAAAAAAA-AAA-AAA-XXXX-XXXX-XXXX這個字符串,我只想提取XXXX-XXXX-XXXX(正好有4個字母/ 。

如果不能使用bash來做到這一點,有沒有其他方式來做到這一點?

謝謝。

+0

你真的要圍繞每個'-'字符的空間?你知道'grep',它是爲了匹配模式而設計的。你可以將你的字符串回顯爲'grep',或者如果你有一個文件,你可以'grep'xxx ....'file'並且得到與該模式匹配的行。這裏有1000多個有關grep的問題。祝你好運。 – shellter 2014-12-05 22:52:17

回答

2
grep -Eo '\<[[:alnum:]]{4}-[[:alnum:]]{4}-[[:alnum:]]{4}\>' file 
  • -o僅輸出匹配的文本
  • 用字界碑\<\>防止錯誤匹配,如「12345-1234-12345 「
+0

Thx ...它工作正常! – NxA 2014-12-06 00:15:16

1

試試這個:

grep -E '[0-9a-zA-Z]{4} - [0-9a-zA-Z]{4} - [0-9a-zA-Z]{4}' your.file 
+0

我解釋得更好。案件是非常特殊的,因爲我有字符串是在這種形式AAAAAAAA-AAA-AAA-XXXX-XXXX-XXXX,我想提取只有XXXX-XXXX-XXXX(有正確的4個字母/數字組由Xs代替X之前的組是隨機的,沒有指定的長度)。 無論如何感謝您的時間 – NxA 2014-12-05 23:05:38

1
[[ AAAAAAAA-AAA-AAA-XXXX-XXXX-XXXX =~ [0-9a-zA-Z]+-[0-9a-zA-Z]+$ ]] && 
    echo ${BASH_REMATCH[0]} 
0

既然你想找到和提取的pattern..you可以用 「sed的」

讓說你有串

%% $%$ ## @#$ @ - & ^% - &^& -JHU7-iuhY-98Uy- * & $# -

至於你提到XXXXs只有組由字母數字位數

命令行

echo '%%$%##[email protected]#[email protected]&^%-*&*^&-JHU7-iuhY-98Uy-*&$#-(*&^'|sed 's/[^[:alnum:]-]//g'|sed 's/^-\{1,\}//g'|sed 's/-\{1,\}$//g' 

輸出

JHU7-iuhY-98Uy 
相關問題