以下是我的文本文件'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?
答案 0 :(得分:1)
尝试使用grep
v=$(grep -oE '\bb[0-9]{3}\b' file)
这将搜索以b
后跟'3'数字开头的单词。
使用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打印)