次の行は、変数の前の先頭のテキストを削除します$PRECEDING
temp2=${content#$PRECEDING}
しかし、今は$PRECEDING
大文字と小文字を区別しないようにしたいと思います。これはsed
のI
フラグで機能します。しかし、私はコマンド全体を理解することはできません。
次の行は、変数の前の先頭のテキストを削除します$PRECEDING
temp2=${content#$PRECEDING}
しかし、今は$PRECEDING
大文字と小文字を区別しないようにしたいと思います。これはsed
のI
フラグで機能します。しかし、私はコマンド全体を理解することはできません。
sed を呼び出したり、shopt を使用したりする必要はありません。これを行う最も簡単で迅速な方法 (Bash 4 を使用している場合):
if [ "${var1,,}" = "${var2,,}" ]; then
echo "matched"
fi
そこで行っているのは、両方の文字列を小文字に変換し、結果を比較することだけです。
sedでそれを行う方法は次のとおりです。
temp2=$(sed -e "s/^.*$PRECEDING//I" <<< "$content")
説明:
^.*$PRECEDING
:^
文字列の開始を.
意味し、任意の文字を.*
意味し、任意の文字を 0 回以上意味します。つまり、これは「に格納されている文字列が続く (および含む) 文字列の先頭からの任意のパターンに一致する」ことを意味し$PRECEDING
ます。I
部分は大文字と小文字を区別しないことを意味し、部分 (使用する場合) は最初の部分g
だけではなく「すべての出現に一致する」ことを意味します。<<<
表記はherestringsのためのものなので、echo
.私が考えることができる唯一の bash の方法は、一致があるかどうかを確認し (大文字と小文字を区別しない)、一致する場合は $content の先頭から適切な数の文字を除外することです。
content=foo_bar_baz
PRECEDING=FOO
shopt -s nocasematch
[[ $content == ${PRECEDING}* ]] && temp2=${content:${#PRECEDING}}
echo $temp2
出力:_bar_baz