可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I want to read a file line by line in Unix shell scripting. Line can contain leading and trailing spaces and i want to read those spaces also in the line. I tried with "while read line" but read command is removing space characters from line :( Example if line in file are:-
abcd efghijk abcdefg hijk
line should be read as:- 1) "abcd efghijk" 2) " abcdefg hijk"
What I tried is this (which not worked):-
while read line do echo $line done
I want line including space and tab characters in it. Please suggest a way.
回答1:
Try this,
IFS='' while read line do echo $line done
EDIT:
From 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 ``''
回答2:
You want to read raw lines to avoid problems with backslashes in the input (use -r
):
while read -r line; do printf "\n" "$line" done
This will keep whitespace within the line, but removes leading and trailing whitespace. To keep those as well, set the IFS empty, as in
while IFS= read -r line; do printf "%s\n" "$line" done
This now is an equivalent of cat as long as file.txt
ends with a newline.
Note that you must double quote "$line"
in order to keep word splitting from splitting the line into separate words--thus losing multiple whitespace sequences.