Назад | Перейти на главную страницу

Как извлечь имя хоста из $ (кто я)

Я пытаюсь извлечь имя хоста из следующей строки (созданной с использованием who am i):

username pts/0        2010-10-05 17:30 (www.example.com)

Мне нужно решение, которое также работает, если (www.example.com) отсутствует, что происходит, когда я вошел в систему локально. Кроме того, решение также должно работать на Mac, где who am i возвращает следующую строку:

username ttys006      Oct  5 16:47 (www.example.com)

Проблема в том, что Mac ставит пробелы в дате, что затрудняет использование cut. Я думаю, должно быть решение, использующее sed для извлечения подстроки, но мне сложно понять, как использовать sed соответственно.

Обновить: Подход безумного

Этот подход работает хорошо, только если на самом деле присутствуют круглые скобки. В противном случае происходит следующее:

$ who am i | cut -f2 -d '(' | tr -d ')'
username ttys006      Oct  5 16:47

Это где awk лучший инструмент. awk -F"[()]" '{print $2}' следует вытащить то, что указано в скобках. Ничего не печатает, если его нет. Так...

$ who am i | awk -F"[()]" '{print $2}'
www.example.com


- Кристофер Карел

Ты можешь использовать who am i | grep -o -e "\((.*)\)" в обеих системах, и он просто возвращает пустую строку, если вы вошли в систему локально.

Вот sed версия, которая работает с круглыми скобками или без скобок вокруг имени хоста или пробелов в дате:

who am i | sed 's/.* (\?\([^)]*\))\?$/\1/'

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

who am i | cut -f2 -d\( | tr -d ')'

Вы берете второе поле, используя левую скобку в качестве разделителя (которая будет включать закрывающую скобку, но не открывающую), а затем используйте tr, чтобы удалить закрывающую скобку.

Я не уверен насчет случая, когда строка отсутствует, поскольку каждый раз, когда я пробую ее на локально зарегистрированном компьютере, я получаю что-то вернулся в скобки. Не могли бы вы привести пример того, что вы получаете в этих обстоятельствах?