次のパターンを使用して文字列varを分割します。
TestString="Artical Title Here (ClassYear) [Author]"
次のようにcutを使ってタイトルをVarに入れることができました。
ATH="$(cut -d'(' -f1 <<<$TestString)"
echo $ATH
ただし、角かっこを含む(ClassYear)を別の文字列変数に入れ、角かっこを含む[Author]と同じ方法を見つけることができません。これらのフィールドと型を他の2つの変数にどのように配置できますか?
答え1
パラメータを使用した拡張bash
:
# remove matching suffix ` (*`
ath="${TestString%% (*}"
# remove matching prefix `*) `
author="${TestString##*) }"
# remove matching prefix `*(`
classyear="${TestString##*(}"
# remove matching suffix ` [*` and add the missing `(`
classyear="(${classyear%% [*}"
答え2
レッスン年と作成者を取得するには、grepを使用できます。パラメータ拡張を使用してタイトルを取得することもできます。
ath=${TestString/(*)*}
year=$(grep -o '(.*)' <<<"$TestString")
auth=$(grep -o '\[.*\]' <<<"$TestString")
これはタイトルですいいえ中に括弧や大括弧がある場合、年は次のようになります。いつも括弧の中で、著者はいつもかっこ内に入れます。
これは.
「すべての単一文字」に一致する正規表現タグで、*
ゼロから無限に一致するように追加されます。したがって、括弧内の内容と一致する必要があります。スコープを絞り込み、クラスの年が常に可能な数である場合でも、'([0-9]+)'
これはまだ広範なソリューションであり、入力に関するより多くの情報を使用してスコープをさらに絞り込むことができます。
括弧は正規表現で文字クラスを生成するので、エスケープする必要があり、文字通り一致させようとします。