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 № 1Korzystanie 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ą grzmotnąć 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