Надо прочитать строчки из файла без учета пустых строк и комментариев.вот так:
while read line; do
echo "[$line]";
done < ./host_listчитает все подряд (и пустые строки и комментарии)
Подскажите пожалуйста как сделать??
> Подскажите пожалуйста как сделать??Как-то так:
grep -v '^ *\(#\|$\)' host_list
> Надо прочитать строчки из файла без учета пустых строк и комментариев.
> читает все подряд (и пустые строки и комментарии)
> Подскажите пожалуйста как сделать??Поскольку bash обозначен в теме, то - пусть позиксивисты захлебнутся -
while read line; do
[[ "$line" =~ ^\ *(#|$) ]] && continue
echo "[$line]";
done < ./host_listили, оформив grep из первого ответа,
while read line; do
echo "[$line]";
done < <( egrep -v '^ *(#|$)' <./host_list)
> Поскольку bash обозначен в теме, то - пусть позиксивисты захлебнутся -Пусть. Изойдутся слюной и захлебнутся. Нам не жаль. ))
#!/bin/shЧисто "чистый" shell. Без примесей.while read line; do
if [ "$line" = "${line%#*}" -a "$line" ]; then
echo $line
fi
done < ./host_list
А если сделать например так:
while read line; do
tmp=${line##*/}
tmp=${tmp%%*/}
tmp=${tmp###*}
if [ "$tmp" != "" ]
then
echo "[$tmp]";
fi
done < ./host_listНасколько правилен и оптимален этот код??
path="ab/cd/ef"
echo "${path}"
echo "${path%/*}" # НЕ жадный - удаляет всё, начиная с конца до первого слеша включительно
echo "${path%%/*}" # жадный - удаляет всё, начиная с конца до последнего слеша включительно
echo "${path#*/}" # НЕ жадный - удаляет всё, начиная с начала до первого слеша включительно
echo "${path##*/}" # жадный - удаляет всё, начиная с начала до последнего слеша включительно
dirname "${path}"
basename "${path}"
выхлопab/cd/efУчитывая это, корректней было бы в моём примере вместо ${line%#*} написать
ab/cd
ab
cd/ef
ef
ab/cd
ef
${line%%#*} или ${line#*#}Насчёт оптимальности вашего примера ничего не скажу, вам решать, но по мне так привычнее regexp у sed, grep, etc..