在UNIX中以已知模式提取单词

时间:2015-04-24 05:11:07

标签: regex unix grep pattern-matching

我有一个名为in.txt的文件,其中包含大量代码,但是我需要提取一个用户ID,该ID保证为EID:nmb685'形式,可能含有以前的内容和/或保证格式之后。我想提取' nmb685'使用bash脚本。我尝试了一些grep和sed的组合,但没有任何效果。

4 个答案:

答案 0 :(得分:0)

如果你的grep支持-P,perl-regexp参数,你可以使用它。

grep -oP 'EID:\K\w+' file

答案 1 :(得分:0)

身份证后输出的内容是什么?你有什么一致可以匹配吗?

如果您知道可以使用的用户ID的长度:

grep "EID:......" in.txt > out.txt

或者如果你不喜欢这样的东西(检查所有char / num后跟空格,前面是EID:)

grep "EID:[A-Za-z0-9]* " in.txt > out.txt

答案 2 :(得分:0)

不是很优雅,但这很有效:

grep "EID:" in.txt | sed 's/\(.*\EID:......\).*/\1/g' | sed 's/^.*EID://'
  1. 选择子字符串" EID:"
  2. 的所有行
  3. 删除" EID之后的所有内容:"加上6个字符
  4. 删除所有内容(包括)" EID:"

答案 3 :(得分:0)

如果您的grep不支持-p但支持-o,则可以将grep和awk结合使用。

grep -o 'EID:\w\+' file|awk -F':' '{print $2}'

虽然可以单独用awk完成,但这更简单。