/ / Pobierz dowolny ciąg między 2 ciągami i przypisz zmienną w bash - bash

Uzyskaj dowolny ciąg znaków między 2 łańcuchami i przypisz zmienną w bash - bash

Nie mogę tego zmusić do działania. Chcę tylko uzyskać ciąg od 2 innych w bash. Lubię to:

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

Wydaje się to takie proste ...

Odpowiedzi:

4 dla odpowiedzi № 1
sed -n "s/.*<start>(.*)<end>.*/1/p"

3 dla odpowiedzi № 2

Można to zrobić w bashu bez żadnego zewnętrznegokomendy takie jak awk i sed. Podczas dopasowywania wyrażenia regularnego w bash, wyniki dopasowania są umieszczane w specjalnej tablicy o nazwie BASH_REMATCH. Drugi element tej tablicy zawiera dopasowanie z pierwszej grupy przechwytywania.

data="If show <start>THIS WORK<end> then it work"
regex="<start>(.*)<end>"
[[ $data =~ $regex ]] && found="${BASH_REMATCH[1]}"
echo $found

Można to również zrobić za pomocą wyrażenia perl w grep (specyficzne dla GNU):

found=$(grep -Po "(?<=<start>).*(?=<end>)" <<< "If show <start>THIS WORK<end> then it work")
echo "$found"

0 dla odpowiedzi № 3

Jeśli masz ciągi <start> i <end>, to zadziała. Ustaw FS do < i >.

[jaypal:~/Temp] FOUND=$(echo "If show <start>THIS WORK<end> then it work" |
awk -v FS="[<>]" "{print $3}")
[jaypal:~/Temp] echo $FOUND
THIS WORK