如何从文件中查找/提取模式?

时间:2013-11-07 03:52:17

标签: regex bash unix

以下是我的文本文件'temp.txt'

的内容
---start of file ---
HEROKU_POSTGRESQL_AQUA_URL (DATABASE_URL)  ----backup--->  b687

Capturing... done
Storing... done
---end of file ----

我想编写一个bash脚本,我需要在变量中捕获字符串'b687'。这实际上是一种模式(字母'b'后跟'n'数字)。我可以通过循环遍历文件并提取所需的字符串(上例中的b687)来做到这一点。有一个简单的方法吗?也许是通过使用awk或sed?

2 个答案:

答案 0 :(得分:1)

尝试使用grep

v=$(grep -oE '\bb[0-9]{3}\b' file)

这将搜索以b后跟'3'数字开头的单词。

regex101 demo


使用sed

v=$(sed -nr 's/.*\b(b[0-9]{3})\b.*/\1/p' file)

答案 1 :(得分:0)

varname=$(awk '/HEROKU_POSTGRESQL_AQUA_URL/{print $4}' filename)

这样做是在匹配模式时读取文件HEROKU_POSTGRESQL_AQUA_URL在这种情况下打印第4个令牌b687


你的另一个选择是使用sed

varname=$(sed -n 's/.* \(b[0-9][0-9]*\)/\1/p' filename)

在这种情况下,我们正在寻找您提到的模式b #### ...并且只打印该模式-n告诉sed不要打印没有该模式的行。 sed命令的其余部分是替换。*是开头的任何字符串。接着是一个(...)形成一个组,我们在其中放置与你的b匹配的正则表达式#####第二部分说出所有匹配只打印组1而最后的p告诉sed打印结果(因为默认情况下我们告诉sed不要用-n打印)