Ответ 1
попробуйте следующее:
your cmd...|sed 's/.*\. //'
это работает независимо от того, сколько "точек" или "точек и пробелов" у вас есть на вашем входе. он берет строку после последней "точки и пробела"
У меня есть строка, которая является выходом другой команды. Мне нужно только конец этой строки для отображения. Строка разделителя ".
" (точка и пробел), и мне нужна строка после последнего индекса ".
".
Как это сделать в Bash?
попробуйте следующее:
your cmd...|sed 's/.*\. //'
это работает независимо от того, сколько "точек" или "точек и пробелов" у вас есть на вашем входе. он берет строку после последней "точки и пробела"
Если строка находится в переменной:
$ foo="header. stuff. more stuff"
$ echo "${foo##*. }"
more stuff
Если существует несколько экземпляров "." (как в моем примере), и вы хотите, чтобы все после первого вхождения, а не последнее, просто используйте один #
:
$ echo "${foo#*. }"
stuff. more stuff
Попробуйте следующее:
echo "This is a sentence. This is another sentence" | rev | cut -d "." -f1 | rev
rev
отменяет вывод. -d
указывает разделитель, разбивая все на поля. -f
указывает поля, которые вы хотите использовать. Мы можем выбрать f1, потому что мы перевернули данные. Нам не нужно знать, сколько полей есть в общей сложности. Нам просто нужно знать первое. В конце мы снова вернем его, чтобы вернуть его в правильном порядке.
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 года поздно для ОП, но один из моих коров-орков указал мне на эту страницу сегодня для чего-то, над чем мы работали, поэтому я подумал, что я брошу это здесь, если другие смотрят слишком.)