Я модифицировал решение sinelaw , чтобы оно соответствовало POSIX. Он не следует символическим ссылкам и включает поиск в корневом каталоге с использованием цикла do while.
find-up:
#!/usr/bin/env sh
set -e # exit on error
# Use cd and pwd to not follow symlinks.
# Unlike find, default to current directory if no arguments given.
directory="$(cd "${1:-.}"; pwd)"
shift 1 # shift off the first argument, so only options remain
while :; do
# POSIX, but gets "Permission denied" on private directories.
# Use || true to allow errors without exiting on error.
find "$directory" -path "${directory%/}/*/*" -prune -o ! -path "$directory" "$@" -print || true
# Equivalent, but -mindepth and -maxdepth aren't POSIX.
# find "$directory" -mindepth 1 -maxdepth 1 "$@"
if [ "$directory" = '/' ]; then
break # End do while loop
else
directory=$(dirname "$directory")
fi
done
sed использует регулярные выражения для поиска текста, который нужно изменить, а в регулярных выражениях .
означает соответствие любому символу. Ваша команда говорит sed изменить любой символ на -
.
Чтобы исправить это, вам нужно экранировать .
, поставив перед ним \
, чтобы указать sed, чтобы он совпадал только с фактическими периодами:
sed 's/\./-/g' iplist.txt