The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Bash - чтение строк из файла"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Системное и пользовательское ПО / Linux)
Изначальное сообщение [ Отслеживать ]

"Bash - чтение строк из файла"  +/
Сообщение от Smjbv (ok) on 13-Янв-14, 16:50 
Надо прочитать строчки из файла без учета пустых строк и комментариев.

вот так:

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

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

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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Bash - чтение строк из файла"  +/
Сообщение от Аноним (??) on 13-Янв-14, 19:56 
> Подскажите пожалуйста как сделать??

Как-то так:

grep -v '^ *\(#\|$\)' host_list

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Bash - чтение строк из файла"  +/
Сообщение от Andrey Mitrofanov on 13-Янв-14, 23:25 
> Надо прочитать строчки из файла без учета пустых строк и комментариев.
> читает все подряд (и пустые строки и комментарии)
> Подскажите пожалуйста как сделать??

Поскольку bash обозначен в теме, то - пусть позиксивисты захлебнутся -

while read line; do
    [[ "$line" =~ ^\ *(#|$) ]] && continue
    echo "[$line]";
done < ./host_list

  или, оформив grep из первого ответа,

while read line; do
    echo "[$line]";
done < <( egrep -v '^ *(#|$)' <./host_list)

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Bash - чтение строк из файла"  +1 +/
Сообщение от михалыч (ok) on 14-Янв-14, 08:21 
> Поскольку bash обозначен в теме, то - пусть позиксивисты захлебнутся -

Пусть. Изойдутся слюной и захлебнутся. Нам не жаль. ))

#!/bin/sh

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

Чисто "чистый" shell. Без примесей.
Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Bash - чтение строк из файла"  +/
Сообщение от Smjbv (ok) on 14-Янв-14, 17:32 
А если сделать например так:

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Bash - чтение строк из файла"  +/
Сообщение от михалыч (ok) on 14-Янв-14, 20:26 
path="ab/cd/ef"
echo "${path}"
echo "${path%/*}"       # НЕ жадный - удаляет всё, начиная с конца  до первого    слеша включительно
echo "${path%%/*}"      #    жадный - удаляет всё, начиная с конца  до последнего слеша включительно
echo "${path#*/}"       # НЕ жадный - удаляет всё, начиная с начала до первого    слеша включительно
echo "${path##*/}"      #    жадный - удаляет всё, начиная с начала до последнего слеша включительно
dirname "${path}"
basename "${path}"

выхлоп
ab/cd/ef
ab/cd
ab
cd/ef
ef
ab/cd
ef
Учитывая это, корректней было бы в моём примере вместо ${line%#*} написать
${line%%#*} или ${line#*#}

Насчёт оптимальности вашего примера ничего не скажу, вам решать, но по мне так привычнее regexp у sed, grep, etc..

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру