Подтвердить что ты не робот

Получить символы после последнего индекса подстроки из строки

У меня есть строка, которая является выходом другой команды. Мне нужно только конец этой строки для отображения. Строка разделителя "." (точка и пробел), и мне нужна строка после последнего индекса ".".

Как это сделать в Bash?

4b9b3361

Ответ 1

попробуйте следующее:

your cmd...|sed 's/.*\. //'

это работает независимо от того, сколько "точек" или "точек и пробелов" у вас есть на вашем входе. он берет строку после последней "точки и пробела"

Ответ 2

Если строка находится в переменной:

$ foo="header. stuff. more stuff"
$ echo "${foo##*. }"
more stuff

Если существует несколько экземпляров "." (как в моем примере), и вы хотите, чтобы все после первого вхождения, а не последнее, просто используйте один #:

$ echo "${foo#*. }"
stuff. more stuff

Ответ 3

Попробуйте следующее:

echo "This is a sentence. This is another sentence" | rev | cut -d "." -f1 | rev

rev отменяет вывод. -d указывает разделитель, разбивая все на поля. -f указывает поля, которые вы хотите использовать. Мы можем выбрать f1, потому что мы перевернули данные. Нам не нужно знать, сколько полей есть в общей сложности. Нам просто нужно знать первое. В конце мы снова вернем его, чтобы вернуть его в правильном порядке.

Ответ 4

Awk - изящное оружие... для более цивилизованного возраста:

[[email protected] ~]$ echo "this. is. my. string. of. some. arbitrary. length" | awk -F'. ' ' { print $NF } '
length
[[email protected] ~]$ echo "this. is. my. string. of. some" | awk -F'. ' ' { print $NF } '   
some

В этом случае NF является переменной awk для "Количество полей", и эта конструкция говорит "напечатайте запись в наибольшем количестве найденных полей", поэтому, если размер вашего ввода изменяется с одной строки на другую, вы все еще чтобы получить последний.

Вы также можете выполнить математику:

[[email protected]~]$ echo "this. is. my. string. of. some. arbitrary. length" | awk -F'. ' ' { print $(NF-2) } '
some
[[email protected]~]$ echo "this. is. my. string. of. some. arbitrary. length" | awk -F'. ' ' { print $(NF-3) } '
of
[[email protected]~]$

(Да, это на 3 года поздно для ОП, но один из моих коров-орков указал мне на эту страницу сегодня для чего-то, над чем мы работали, поэтому я подумал, что я брошу это здесь, если другие смотрят слишком.)