特定のパターンを一致させた後に変数からテキストを削除する方法は?

特定のパターンを一致させた後に変数からテキストを削除する方法は?

いくつかのパターンの前のいくつかのテキストを削除したいと思います。たとえば、

VAR="This is a test script text and real script text."
PATTERN="test "

私が望む出力は次のとおりです。

NEW_VAR="script text and real script text."

答え1

使用しているシェルがタイプパラメータ拡張をサポートしている場合は、次のことを行う必要があります${WORD##*STR}

printf '%s\n' "${VAR##*$PATTERN}"

新しい変数に保存するには、コマンド置換トリックを使用する$(..)か、printf書式設定された文字列を新しい変数に保存するために使用される独自の機能を使用します。

printf -v NEW_VAR '%s' "${VAR##*$PATTERN}"
printf '%s\n' "$NEW_VAR"

交換にシェルを使用することsedや、外部のユーティリティを分岐するよりも効率的ですawk

から引用パラメータ拡張 Bash Hackers Wiki

${PARAMETER##PATTERN}

このフォームは、一致しようとしている説明されたパターンから削除されます。文字列の始まり。オペレータは、##最長のテキスト一致を削除しようとします。

答え2

不要printf- 「パラメータ拡張」を使用して新しい変数を割り当てます。

NEW=${VAR#*$PATTERN}
echo $NEW
script text and real script text.

関連情報