2016-11-07 7 views
2

он выглядит во время чтения строки отбрасывает пустые первые символыБаш: сохранение белого charater при резке в цикле в то время как

while read line; 
do DB=$( echo "$line" | cut -c1-8);   
echo DB=$DB; 
echo $line; 
done < histogram.txt 

текст

 7107: (12,255, 0) #0CFF00 srgb(12,255,0) 
     4514: (12,255,255) #0CFFFF srgb(12,255,255) 
    11580: (30, 0,253) #1E00FD srgb(30,0,253) 
    14365: (246,255, 0) #F6FF00 srgb(246,255,0) 
    29576: (255, 0, 0) #FF0000 red 
____188858: (255,255,255) #FFFFFF white 

ожидаемый результат для линии 1 " .... 7107 "(. = Пробел) что я действительно получаю" 7107: ("

the la («____1888»), потому что я заменил место подчеркиванием результат

ТАК, как я могу получить пустые символы?

+0

Использование: '' IFS = как: 'в то время как IFS = читать -r линии; do ... ' – anubhava

ответ

3

Вам нужно 2 вещи:

  1. набор IFS в пустую строку для команды read: while IFS= read -r line - это сохранит все пробелы в переменную

  2. процитировать переменную везде вас использовать: echo "$line"

while IFS= read -r line; do 
    DB="${line:1:8}" 
    echo "DB=$DB" 
    echo "$line" 
done < histogram.txt 

параметр Баш substution может взять подстроку, так что вам не нужно cut

+1

Используйте' DB = $ {line %%: *} 'или' IFS =: read -r DB _ <<< "$ line", чтобы не указывать точную ширину поля. – chepner