これを動作させることはできません。私はbashで2つの文字列の間の文字列を取得したいだけです。このように:あなたは、文字列に<開始>と<終了>を持っている場合2文字列の間の任意の文字列を取得し、bashで変数を代入します。
FOUND=$(echo "If show <start>THIS WORK<end> then it work" | **the magic**)
echo $FOUND
それはとても簡単なようで...
これを動作させることはできません。私はbashで2つの文字列の間の文字列を取得したいだけです。このように:あなたは、文字列に<開始>と<終了>を持っている場合2文字列の間の任意の文字列を取得し、bashで変数を代入します。
FOUND=$(echo "If show <start>THIS WORK<end> then it work" | **the magic**)
echo $FOUND
それはとても簡単なようで...
sed -n 's/.*<start>\(.*\)<end>.*/\1/p'
これは動作します。 FS
を<
と>
に設定します。
[jaypal:~/Temp] FOUND=$(echo "If show <start>THIS WORK<end> then it work" |
awk -v FS="[<>]" '{print $3}')
[jaypal:~/Temp] echo $FOUND
THIS WORK
これは、awkやsedなどの外部コマンドがなくてもbashで実行できます。 bashで正規表現のマッチを行うとき、マッチの結果はBASH_REMATCHという特別な配列に入れられます。この配列の2番目の要素には、最初の取得グループの一致が含まれます。
data="If show <start>THIS WORK<end> then it work"
regex="<start>(.*)<end>"
[[ $data =~ $regex ]] && found="${BASH_REMATCH[1]}"
echo $found
これはgrepの(GNUの特定)でperlの正規表現を使用してもを行うことができます。
found=$(grep -Po '(?<=<start>).*(?=<end>)' <<< "If show <start>THIS WORK<end> then it work")
echo "$found"
、あなたの文字列にとを持っていますか?それとも参考にしてくれるの?それ以外の場合は、実際の文字列と希望の出力は何ですか?もう少し情報があれば助けになるでしょう! –
@JaypalSinghおよびを参考にしてください。任意のテキストにすることができます:) $は、 "この仕事" –
Rodrigo