0

这是我的名为“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?

4

2 回答 2

1

尝试使用grep

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

b这将搜索以“3”位数字开头的单词。

正则表达式101演示


使用sed

v=$(sed -nr 's/.*\b(b[0-9]{3})\b.*/\1/p' file)
于 2013-11-07T04:03:24.680 回答
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 打印)

于 2013-11-07T03:58:21.327 回答