.
- метасимвол регулярного выражения в sed
, соответствующий любому одному символу. Поскольку путь $ из
вставляется непосредственно в регулярное выражение, .
есть, как будто вы написали:
sed "s@.@../pool/@"
сами. Это заменяет один раз на " ../pool/
", что приводит к удалению первого символа и вставке "../pool/" вместо него.
Если команда readlink
выполняется вручную, вы обнаружите, что ./
не является частью содержимого ссылки - то же самое показывает ls
.
Вам, по крайней мере, понадобится особый случай ".
"в сценарии, поскольку он может присутствовать или отсутствовать в содержимом ссылки. Одним из вариантов является использование readlink -f
как для канала, так и для .
- что даст вам абсолютные пути к обоим - но есть более простые варианты, если у вас есть только один случай.
Если вы находитесь в bash
, вы можете уйти без sed
вообще с помощью основного расширения параметров :
ln -sf "${a/$from/$to}" "$i"
, которое заменит расширение $ с
расширением $ до
в $ а
, на .
обрабатывается буквально (хотя используются *
и другие метасимволы оболочки - действительно это должно быть "$ {a/" $ от "/" $ до"} "
, чтобы избежать этого). Это более чистый и простой способ сделать это в целом.
Есть несколько вещей, которые нужно проверить, если вы не можете получить хорошее совпадение. Вот мой список:
У вас есть последняя версия Nmap? Мы постоянно добавляем новые отпечатки пальцев.
Вы даете Нмапу лучшие шансы найти совпадение? Я написал ответ на Security.SE, в котором перечислена куча причин, по которым Nmap может решить, что совпадение отпечатков пальцев не является надежным.
Есть ли что-то, что фильтрует или модифицирует пакеты между вами и вашей целью? Это может сделать брандмауэр или IPS, а также определенные виды виртуальных сетевых интерфейсов или VPN соединений.
Основываясь на аргументах в вашем комментарии (nmap -oX -v -O -sT -T Aggressive -p T:22,T:23,T:513,T:139,T:3389,T:137,T:138,T:514,T:1002,T:80,T:443,T:445,T:25
), я бы порекомендовал добавить немного UDP сканирования портов (-sU).