пропускать строки при чтении текстовых файлов из ksh

У меня есть текстовый файл с построчными именами. Я читаю этот файл через KornShell (ksh), получаю эти имена и выполняю некоторые операции в цикле. Я хочу добавить комментарий в текстовый файл для удобства чтения (т.е. строки, начинающиеся с символа #, являются комментариями, их не нужно читать). Итак, я хочу прочитать строки, которые не начинаются с символа #.

В ksh я читаю так:

while read base
do
---
---
done<file

Я пытался использовать grep, но он не работает. Мне нужен правильный синтаксис для достижения этой цели в ksh.


person user2496132    schedule 25.12.2013    source источник


Ответы (2)


Вы можете сделать, например, это (read.sh):

#!/bin/ksh

while read line
do
    [[ $line = \#* ]] && continue

    echo $line
done < read.sh
person Jakub Kotowski    schedule 25.12.2013
comment
что эта часть будет делать ..? Я хочу выполнить операцию в строках, не начинающихся с # .. можно немного расширить - person user2496132; 25.12.2013
comment
continue похоже на continue на любом другом языке - он перейдет к концу цикла и фактически прочитает следующую строку. Итак, в том месте, где я выполняю echo $ line, вы можете выполнять свои операции, потому что в этот момент вы знаете, что $ line не начинается с # - person Jakub Kotowski; 25.12.2013
comment
Двойные скобки - это просто тестовый оператор с сопоставлением с образцом (он соответствует всему, что начинается с хеша, хеш должен быть экранирован, потому что в противном случае он будет интерпретирован как комментарий в скрипте): mkssoftware.com/docs/man1/test.1.asp - person Jakub Kotowski; 25.12.2013
comment
Или эквивалентно grep -v '^#' read.sh | while read line; do echo "$line"; done - person tripleee; 25.12.2013

Как насчет этого (отредактировано, чтобы включить полный фрагмент кода):

while read base
do
    # skip comments
    [ -z "`echo $base | grep '^#'`" ] || continue
    # handle remaining lines here
done<file

Но другой ответ содержит гораздо более краткое и ksh-ишское решение.

person ales_t    schedule 25.12.2013
comment
где включить это условие. Вы можете, пожалуйста, eloborate ..? - person user2496132; 25.12.2013