0

「temp.txt」という名前のテキスト ファイルの内容は次のとおりです。

---start of file ---
HEROKU_POSTGRESQL_AQUA_URL (DATABASE_URL)  ----backup--->  b687

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

文字列 'b687' を変数に取り込む必要がある bash スクリプトを作成したいと考えています。これは実際にはパターンです (文字 '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 に一致するときにファイルを読み取ることです この場合は b687 の 4 番目のトークンを出力します


あなたの他のオプションは、sedを使用することです

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

この場合、あなたが言及したパターン b####... を探し、そのパターンのみを出力します -n は、そのパターンを持たない行を出力しないように sed に指示します。sed コマンドの残りの部分は置換です。* は先頭の任意の文字列です。(...) が続きます。これは、b##### に一致する正規表現を配置するグループを形成します。2 番目の部分は、すべての一致のうち、グループ 1 のみを出力し、最後の p は sed に次のように指示します。結果を出力します (デフォルトでは sed に -n で出力しないように指示したため)

于 2013-11-07T03:58:21.327 に答える