/ / Wyodrębnij dane między ogranicznikami - bash

Wyodrębnij dane między ogranicznikami - bash

Otrzymałem wynik z innego skryptu a .txt z tymi ciągami ->

<li this="that" id="number-*">
<li me="somebody" id="number-*">

* Faktycznie jest liczbą losową i muszę ją uzyskać, "liczba" nie zmienia się.

Czy jest jakiś sposób na wykonanie wbudowanego polecenia Bash?

czołgi

Odpowiedzi:

1 dla odpowiedzi № 1

Korzystanie z GNU grep:

grep -oP "number-Kd+" inputfile

lub

grep -oP "(?<=number-)d+" inputfile

1 dla odpowiedzi nr 2

Za pomocą grep -oP

s="<li this="that" id="number-1234">"
echo "$s"|grep -oP "number-K[0-9]+"
1234

Dla starszych systemów, które nie obsługują grep -P tutaj jest wersja awk:

echo "$s" | awk -F "number-" "{sub(/[^0-9]+/, "", $2); print $2}"
1234

0 dla odpowiedzi № 3

Nie wiem o wbudowanych baskach, ale jeśli chcesz tylko numery:

egrep -o "[0-9]+"

Powinno to zrobić dla ciebie.


0 dla odpowiedzi nr 4

Jeden z cut i sed,

cut -d- -f 2 filename | sed "s/">//g"

Przykład:

$ s="<li this="that" id="number-1234">"
$ echo "$s" | cut -d- -f 2 | sed "s/">//g"
1234

0 dla odpowiedzi № 5

Za pomocą tylko wbudowane komendy:

while read; do
[[ $REPLY =~ number-([[:digit:]]+) ]] && echo ${BASH_REMATCH[1]}
done < input.txt
  • Czyta każdą linię pliku we wbudowanym $REPLY zmienna, jeden po drugim
  • Stosuje wyrażenie regularne number-([[:digit:]]+) aby podać numer, którego potrzebujesz
  • Jeśli wyrażenie regularne pasuje, echo submatch