2016-04-06 3 views
0

Вывод команды выглядит примерно такКак я могу получить название символической ссылки?

# ls -l abc.zip 
lrwxrwxrwx 1 sri dba 122 Mar 27 23:37 /a/b/c/abc.zip -> /x/y/z/abc.zip 

мне нужно извлечь/вырезать весь путь, который приходит после ->. Я использовал cut -f -d, но он не работает несколько раз, я думаю, номер столбца меняется. Поэтому мне нужен эквивалент sed.

ответ

0

Использование 'вырезать', вы можете указать только отдельные разделители символов.

Для разделителей строк простой и понятный вариант - awk. В вашем случае попробуйте:

ls -ls abc.zip | awk -F '->' '{print $2}' 
1

Это может работать для вас (GNU СЭД):

sed -n 's/^l.*->\s*//p' file 
1

Что вы читаете - это информация о символической ссылке. Parsing ls is definitely a bad idea.

А вместо того, чтобы использовать readlink? Это делает считанное значение символической ссылки:

readlink abc.zip 

Или с -f полного пути:

readlink -f abc.zip 

Смотрите пример:

$ touch a   
$ ln -s a b   # we create a symbolic link "b" to the file "a" 
$ ls -l b 
lrwxrwxrwx 1 me me 1 Apr 6 09:54 b -> a 
$ readlink -f "b" # we check the full "destination" of the symlink "b" 
/home/me/a 
$ readlink "b"  # we check the "destination" of the symlink "b" 
a 
Смежные вопросы