在 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://'
- Select 包含子字符串 "EID:"
的所有行
- 删除"EID:"后的所有内容加上6个字符
- 删除 "EID:"
之前(包括)之前的所有内容
如果你的 grep 不支持 -p
但支持 -o
,你可以结合使用 grep 和 awk。
grep -o 'EID:\w\+' file|awk -F':' '{print }'
虽然单独用awk也可以,但是这样更直接
我有一个名为 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://'
- Select 包含子字符串 "EID:" 的所有行
- 删除"EID:"后的所有内容加上6个字符
- 删除 "EID:" 之前(包括)之前的所有内容
如果你的 grep 不支持 -p
但支持 -o
,你可以结合使用 grep 和 awk。
grep -o 'EID:\w\+' file|awk -F':' '{print }'
虽然单独用awk也可以,但是这样更直接