При создании символьной ссылки на относительный путь это сохранит его как относительную символьную ссылку, не абсолютную как шоу в качестве примера. Это обычно - хорошая вещь. Абсолютные символьные ссылки не работают, когда файловая система смонтирована в другом месте.
Причина Ваш пример не работает, состоит в том, что это относительно родительского каталога символьной ссылки и не где ln
выполняется.
Можно сделать:
$ pwd
/home/beau
$ ln -s foo/bar.txt bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
Или для этого вопросы:
$ cd foo
$ ln -s foo/bar.txt ../bar.txt
Важно понять что первый аргумент после ln -s
хранится как цель символьной ссылки. Это может быть любая произвольная строка (с единственными ограничениями, что это не может быть пусто и не может содержать символ NUL), но в то время, когда символьная ссылка используется и разрешается, та строка понята как относительный путь к родительскому каталогу символьной ссылки (когда это не запускается с /
).
$ sed 's/\<[0-9]\>/0&/' ./infile
201103 01 /mnt/hdd/PUB/SOMETHING
201102 07 /mnt/hdd/PUB/SOMETH ING
201103 11 /mnt/hdd/PUB/SO METHING
201104 03 /mnt/hdd/PUB/SOMET HING
201106 01 /mnt/hdd/PUB/SOMETHI NG
Вот (non-sed) способ использовать удар с расширенным regex..
Этот метод, позволяет объему делать более сложную обработку отдельных строк. (т.е. больше, чем просто regex замены)
while IFS= read -r line ; do
if [[ "$line" =~ ^(.+\ )([0-9]\ .+)$ ]]
then echo "${BASH_REMATCH[1]}0${BASH_REMATCH[2]}"
else echo "$line"
fi
done <<EOF
201103 1 /mnt/hdd/PUB/SOMETHING
201102 7 /mnt/hdd/PUB/SOMETH ING
201103 11 /mnt/hdd/PUB/SO METHING
201104 3 /mnt/hdd/PUB/SOMET HING
201106 1 /mnt/hdd/PUB/SOMETHI NG
EOF
вывод:
201103 01 /mnt/hdd/PUB/SOMETHING
201102 07 /mnt/hdd/PUB/SOMETH ING
201103 11 /mnt/hdd/PUB/SO METHING
201104 03 /mnt/hdd/PUB/SOMET HING
201106 01 /mnt/hdd/PUB/SOMETHI NG
while read a b c
do
new_format=$(printf "%02d" $b)
echo "$a $new_format $c"
done </tmp/input
\<[0-9]\>
создайте, который я думаю, одно ответственное за соответствие единственным цифрам, но не уверенный, чем называют эту конструкцию.Спасибо. – sasuke 12.03.2011, 15:16&
в замещающей строке будет использовать подобранный LHS-sed 's/\<[0-9]\>/0&/'
– glenn jackman 12.03.2011, 16:33<>
граница слова в оболочке regex синтаксис. Задумайтесь о нем, даже 'sed 's/\b [0-9], \b/0& /' также работает. Спасибо вам обоим. :) – sasuke 12.03.2011, 17:18<>
функция расширенного regex (не оболочки, как таковой)..., в зависимости от которой версии, и который опции Вы используете,sed
иshell
может оба использовать или расширенный или стандарт regex... стандарт regex использование\<\>
– Peter.O 12.03.2011, 19:19