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

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

Итак, у меня есть эта строка:

[email protected]:/home/some/directory/file

Я просто хочу извлечь адрес каталога, означающий, что мне нужно только бит после символа ":" и получить:

/home/some/directory/file

спасибо.

Мне нужна общая команда, поэтому команда cut не работает, так как переменная $var не имеет фиксированной длины.

4b9b3361

Ответ 1

Использование sed:

$ [email protected]:/home/some/directory/file
$ echo $var | sed 's/.*://'
/home/some/directory/file

Ответ 2

Это может сработать для вас:

echo ${var#*:}

Ответ 3

Для полноты, используя cut

cut -d : -f 2 <<< $var

И используя только bash:

IFS=: read a b <<< $var ; echo $b

Ответ 4

Это должно сделать трюк:

$ echo "$var" | awk -F':' '{print $NF}'
/home/some/directory/file

Ответ 5

Это также сделает.

echo $var | cut -f2 -d":"

Ответ 6

awk -F: '{print $2}' <<< $var

Ответ 7

Вы не говорите, какую оболочку вы используете. Если он совместим с POSIX, например Bash, то расширение параметра может делать то, что вы хотите:

Расширение параметров

...

${parameter#word}

Удалить малый шаблон префикса.
 word расширяется, чтобы создать шаблон. Затем расширение параметра приводит к parameter, причем наименьшая часть префикса совпадает с удаленным шаблоном.

Другими словами, вы можете написать

$var="${var#*:}"

который удалит все, что соответствует *:, из $var (т.е. все до и включая первый :). Если вы хотите соответствовать последнему :, вы можете использовать ## вместо #.

Это все предполагается, что часть для удаления не содержит : (true для адресов IPv4, но не для адресов IPv6)