Чтение файла по строкам (с пробелом) в сценариях Unix Shell - Проблема
Я хочу прочитать файл строки за строкой в сценариях оболочки Unix. Строка может содержать начальные и конечные пробелы, и я хочу читать эти пробелы также в строке.
Я попытался использовать "while read line", но команда read удаляет символы пробела из строки:(
Пример, если строка в файле: -
abcd efghijk
abcdefg hijk
Строка
должна читаться как: -
1) "abcd efghijk"
2) " abcdefg hijk"
То, что я пробовал, это (что не сработало): -
while read line
do
echo $line
done < file.txt
Я хочу, чтобы строка включала в себя пробелы и символы табуляции.
Пожалуйста, предложите способ.
Ответы
Ответ 1
Попробуйте это,
IFS=''
while read line
do
echo $line
done < file.txt
EDIT:
От man bash
IFS - The Internal Field Separator that is used for word
splitting after expansion and to split lines into words
with the read builtin command. The default value is
``<space><tab><newline>''
Ответ 2
Вы хотите прочитать необработанные строки, чтобы избежать проблем с обратными косыми чертами во вводе (используйте -r
):
while read -r line; do
printf "<%s>\n" "$line"
done < file.txt
Это будет содержать пробелы внутри строки, но удаляет ведущие и завершающие пробелы. Чтобы сохранить их, установите IFS пустым, как в
while IFS= read -r line; do
printf "%s\n" "$line"
done < file.txt
Теперь это эквивалент cat < file.txt
, если file.txt
заканчивается новой строкой.
Обратите внимание, что вы должны удвоить кавычку "$line"
, чтобы разделить слова на разделение строки на отдельные слова - таким образом, теряя несколько пробельных последовательностей.