LINUX.ORG.RU
ФорумAdmin

Bash - чтение строк из файла

 ,


2

2

Надо прочитать строчки из файла без учета пустых строк и комментариев.

вот так:

while read line; do
  echo "[$line]";
done < ./host_list

читает все подряд (и пустые строки и комментарии)

Подскажите пожалуйста как сделать??


if echo $line | grep -v .... ; then
else
fi

Так отсекать пустые строки и комментарии

И т.д.

svu ★★★★★ ()

очевидно добавить в цикл что-то вроде

[ -z "$line" ] && continue
[ "${line::1}" == "#" ] && continue

в самом начале цикла.

emulek ()

grep -Ev '^($|#)' host_list

anonymous ()
Ответ на: комментарий от anonymous

а если в стороке есть только пробелы или табы? или комментарий идёт после команды?

teod0r ★★★★★ ()

pron!!!

[ megabaks@desktop ] ~ $ cat test_lor_file 
test

for

LOR
[ megabaks@desktop ] ~ $ while read line;do echo \'"${line}"\';done <<< "$( grep -v -e "^$" -e "^#" test_lor_file )"
'test'
'for'
'LOR'
[ megabaks@desktop ] ~ $

megabaks ★★★★ ()
Ответ на: комментарий от teod0r

За «а если» в приличном обществе бьют сапогом по морде.

anonymous ()
Ответ на: комментарий от anonymous

Пустые строки бывают с пробелами, перед коментарием может быть любое количество пробелов, табов

egrep -v '^\s*(#|$)' /etc/nginx/nginx.conf

ihanick ()
Ответ на: комментарий от ihanick

Ещё бывают другие символы начала комментария, те ; //, или многострочные комментарии навроде /* ... */.

anonymous ()
Ответ на: комментарий от anonymous

в приличном обществе бьют сапогом по морде

в приличном обществе не бьют сапогом по морде

teod0r ★★★★★ ()

До кучи:

cat host_list | egrep -v "^[[:space:]]*$|^#" | while read line; do
  echo "[$line]";
done
:-)

AS ★★★★★ ()

А если сделать например так:

while read line; do
  tmp=${line##*/}
  tmp=${tmp%%*/}
  tmp=${tmp###*}
  if [ "$tmp" !=  "" ]
  then
    echo "[$tmp]";
  fi
done < ./host_list

Насколько правилен и оптимален этот код??

KLfer ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.