シェルスクリプトから2つの文字列間の単語を抽出する方法

シェルスクリプトから2つの文字列間の単語を抽出する方法

Shellscriptから2つの文字列の間のテキストを抽出したいと思います。以下の文字列から「要約:」と「到着位置」の間のテキストを抽出したいと思います。 mySTring="Summary: New Arrival Arrived At:11/8/2018, 01:38:00 P.M." これはどのように達成できますか?

答え1

要件に厳密に従い、テキストがすでに変数にあると仮定すると、次のようになります。

s="Summary: New Arrival Arrived At:11/8/2018, 01:38:00 P.M."
s="${s#*Summary:}"
s="${s%% Arrived At*}"
printf '%s\n' "$s"

...しかし、データの後に常にスペースがある場合は、そのSummary:スペースも削除することをお勧めします。

s="${s#*Summary: }"
s="${s%%Arrived At*}"

...前にスペースがある場合は以前と同じですArrived At

s="${s#*Summary: }"
s="${s%% Arrived At*}"

答え2

grepとPerl Regexを使って同じ効果を得ることができます。

$ echo "$mySTring" | grep -Po  "Summary: \K(.*)(?= Arrived )"
New Arrival

\K: grep はパターンと一致するように \K より前のすべての項目を保持しますが、印刷時には除外されます。

?=は、キャプチャする括弧内の対応する部分が後に続く前方予測キャプチャですが、最終出力は印刷または抽出されません。

答え3

$ mySTring="Summary: New Arrival Arrived At:11/8/2018, 01:38:00 P.M."

$ echo ${mySTring}
Summary: New Arrival Arrived At:11/8/2018, 01:38:00 P.M.

$ echo ${mySTring} | sed "s/.*Summary://;s/Arrived.*//"
 New Arrival

bashを使用してこれを行うには、次のようにします。

mySTring="Summary: New Arrival Arrived At:11/8/2018, 01:38:00 P.M."
mySTring=${mySTring#*:}
$ echo ${mySTring}
New Arrival Arrived At:11/8/2018, 01:38:00 P.M.
$ echo ${mySTring%%Arrived*}
New Arrival
$ mySTring=${mySTring%%Arrived*}
$ echo ${mySTring}
New Arrival

Bashの文字列操作 -https://www.tldp.org/LDP/abs/html/string-manipulation.html

関連情報