2011-12-19 14 views
0

これを動作させることはできません。私はbashで2つの文字列の間の文字列を取得したいだけです。このように:あなたは、文字列に<開始>と<終了>を持っている場合2文字列の間の任意の文字列を取得し、bashで変数を代入します。

FOUND=$(echo "If show <start>THIS WORK<end> then it work" | **the magic**) 
echo $FOUND 

それはとても簡単なようで...

+0

、あなたの文字列にを持っていますか?それとも参考にしてくれるの?それ以外の場合は、実際の文字列と希望の出力は何ですか?もう少し情報があれば助けになるでしょう! –

+0

@JaypalSingh およびを参考にしてください。任意のテキストにすることができます:) $は、 "この仕事" – Rodrigo

答えて

4
sed -n 's/.*<start>\(.*\)<end>.*/\1/p' 
0

これは動作します。 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 
2

これは、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" 
関連する問題