Я хочу прочитать файл построчно в Unix shell scripting. Строка может содержать ведущие и последующие пробелы, и я хочу прочитать эти пробелы также в строке. Я пробовал использовать команду "while read line", но команда read удаляет символы пробела из строки :( Пример, если строки в файле следующие:-
abcd efghijk
abcdefg hijk
строка должна быть прочитана как:-
То, что я пробовал, это следующее (что не сработало):-
while read line
do
echo $line
done < file.txt
Мне нужна строка, включающая пробел и символы табуляции. Пожалуйста, предложите способ.
Попробуйте это,
IFS=''
while read line
do
echo $line
done < file.txt
ЭДИТ:
Из 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>''
Вы хотите читать сырые строки, чтобы избежать проблем с обратными слешами во входных данных (используйте -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"
в двойные кавычки, чтобы разделение слов не разбивало строку на отдельные слова - таким образом, теряется несколько пробельных последовательностей.