2014-12-05 34 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 
相关问题