У меня есть сценарий оболочки как это:
cat file | while read line
do
# run some commands using $line
done
Теперь я должен проверить, содержит ли строка какой-либо непробельный символ ([\n\t]), и в противном случае пропустите его. Как я могу сделать это?
Поскольку read
по умолчанию считывает поля, разделенные пробелами, строка, содержащая только пробелы, должна приводить к присвоению переменной пустой строки, поэтому вы должны иметь возможность пропускать пустые строки с помощью всего:
[ -z "$line" ] && continue
bash:
if [[ ! $line =~ [^[:space:]] ]] ; then
continue
fi
И используйте done
cat file | в то время как
, если вы не знаете, зачем использовать последний.
cat
Я бесполезен в этом случае, если вы используете цикл while read. Я не уверен, имели ли вы в виду, что хотите пропустить пустые строки или хотите пропустить строки, которые также содержат хотя бы пробел.
i=0
while read -r line
do
((i++)) # or $(echo $i+1|bc) with sh
case "$line" in
"") echo "blank line at line: $i ";;
*" "*) echo "line with blanks at $i";;
*[[:blank:]]*) echo "line with blanks at $i";;
esac
done <"file"