bashで正しいregexを作成するのに役立つでしょうか?私がする必要がどのようなword-bash正規表現の最初の出現後にマッチが終了する
は次のような構造から、各テーブル定義を抽出することである。
OID: 123
Name: tab1
CREATE TABLE tab1 (
...
);
OID: 456
Name: tab2
CREATE TABLE tab2 (
...
);
OID: 789
Name: tab3
CREATE TABLE tab3 (
...
);
1行の形式を準備:
OID: 123 Name: tab1 CREATE TABLE tab1 (...); OID: 456 Name: tab2 CREATE TABLE tab2 (...); OID: 789 Name: tab3 CREATE TABLE tab3 (...);
私は言葉Name
とOID
の間のすべてのテキストを取得する必要があります。 私はテーブル名ごとに特定の正規表現を準備する単純なループを書いたが、私はマッチングに問題がある。各表について
は私の正規表現に名前を付けるようなものです:
(Name: tab2 .*?)(OID: .*)
私の結果は次のとおりです。
Name: tab2 CREATE TABLE tab2 (...)
私はオンライン正規表現シミュレータで正規表現の上にテストし、それが働いています。私は完全一致から最初のグループを抽出するだけです。 バッチ正規表現では正しくグループ化されていません。バッチは知らないと思う? (先行する要素の0回または1回の出現)。上記の正規表現をbashで使用した結果はありません。
#!/bin/bash
tables_definition=$(less tables_definition.txt)
regex="(Name: tab2 .*?)(OID: .*)"
if [[ $tables_definition =~ $regex ]];
then
object_definition="${BASH_REMATCH[1]}"
#do something
fi
助けてください:
私のbashコマンドは次のようなものです。
使用しているbashコマンドを投稿できますか? –
は私の投稿 – MrF
'。*を編集しました。'問題です - POSIX ERE(bashの正規表現が準拠している標準)は非貪欲なグロブを持っていません。 (正規表現エンジンは実際にはbashに組み込まれていませんが、オペレーティングシステムのCライブラリによって提供されるため、実装はプラットフォームごとに多少異なりますが、使用する呼び出しはERE標準を実装する必要があります。プラットフォーム固有の拡張機能)。 –