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

Extract word after a known pattern in UNIX

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

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

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

ID后面输出的是什么?有什么一致的东西可以匹配吗?

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

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

或者如果你不这样做可能是这样的(检查所有 char/num 后跟 space,前面是 EID:)

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

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

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

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

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

虽然单独用awk也可以,但是这样更直接