Unix: как считать исходное содержание строки из файла

Если Вы ищете кэширующийся сервер DNS, думают о dnsmasq или pdnsd. Оба просты настроить с некоторыми текстовыми файлами.

Однако, если Вы ищете реальный сервер DNS, связываете, промышленный стандарт, но это может быть довольно громоздким для конфигурирования.

Некоторые альтернативы были бы tinydns или maradns, которые более просты настроить, чем связывают.

Они все доступны как пакеты на Debian.

6
18.08.2013, 05:05
2 ответа

Вы теряете пробелы, когда Вы расширяетесь $line. Поместите двойные кавычки вокруг своего переменного расширения, и Вы сохраните пробелы:

$ cat dept.dat | while read line
> do
>     echo "$line"
>     echo "$line" | cut -c 12-29"
> done
department: customer service  section: A
 customer service 
department: marketing         section: A
 marketing        
department: finance           section: A
 finance          
11
27.01.2020, 20:23
  • 1
    +1. Я также рекомендовал бы установить IFS к пустой строке, так, чтобы ведущий пробел не был отброшен, и определение -r флаг к read, так, чтобы обратные косые черты не были обработаны/отброшены. Это: вместо while read line, Я рекомендовал бы писать while IFS= read -r line. Это является более подробным, но это гарантирует, что никакого искажения не произойдет. (Если строка не содержит пустые байты...) –  ruakh 18.08.2013, 10:27

соответствие regex

Можно также достигнуть чего-то подобное использование sed:

$ cat dept.dat | while read line
do
  echo "$line"
  echo "$line" | sed -e 's/.*: \(.*\)  .*/\1/'
done

Вы могли также использовать awk:

$ cat dept.dat | while read line
do
  echo "$line"
  echo "$line" | awk '{sub(/.*nt: /,""); sub(/  .*/,""); print }'
done

Вы могли также использовать grep:

$ cat dept.dat | while read line
do
  echo "$line"
  echo "$line" | grep -oP '(?<=: ).*(?=  )'
done

Примечание: grep решение принимает последнюю версию grep это включает PCRE (поддержка регулярного выражения Perl).

Основное различие в этих решениях по сравнению с. cut это, они соответствуют на основе шаблонов где cut решение принимает более твердую структуру (определенные позиции символа) к входным данным.

статическое позиционное соответствие

Альтернатива использованию cut должен использовать awk substr функция:

$ cat dept.dat | while read line
do
  echo "$line"
  echo "$line" | awk '{print substr($0,13,16)}'
done
1
27.01.2020, 20:23

Теги

Похожие вопросы