使用bash在文件中查找XXXX - XXXX - XXXX等字符串

时间:2014-12-05 22:45:41

标签: bash file pattern-matching

有没有办法在使用bash的文件中找到像XXXX-XXXX-XXXX(其中X是数字和字母)的字符串?

例如:我在文本文件中有AAAAAAAA-AAA-AAA-XXXX-XXXX-XXXX此字符串,我想要仅提取XXXX-XXXX-XXXX(对于由X提出的组,正好有4个字母/数字)。

如果使用bash无法做到这一点,还有其他方法吗?

感谢。

4 个答案:

答案 0 :(得分:2)

grep -Eo '\<[[:alnum:]]{4}-[[:alnum:]]{4}-[[:alnum:]]{4}\>' file
  • -o仅输出匹配的文字
  • 使用字边界标记\<\>来防止错误匹配,例如“12345-1234-12345”

答案 1 :(得分:1)

试试这个:

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

由于您希望找到并提取模式..您可以使用&#34; sed&#34;

假设你有字符串

  

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

正如您所提到的,只有XXXX组由字母数字组成

命令行

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

输出

JHU7-iuhY-98Uy