Ответ 1
Используйте cat
для конкатенации или отображения. Здесь нет необходимости:
while read line ; do
echo "$line"
done < file
У меня есть файл вроде этого:
one
two
three
four
Я хотел бы использовать цикл for в bash script для сканирования строки строки для строки. Раньше я использовал cut
, но я не смог дать команде cut
разделитель новой строки, как я могу это сделать?
Таким образом, это не работает:
cut -d'\n' -f1
Любое предложение?
Используйте cat
для конкатенации или отображения. Здесь нет необходимости:
while read line ; do
echo "$line"
done < file
Я оказался в той же самой проблеме, это работает для меня:
cat file.cut | cut -d$'\n' -f1
Или:
cut -d$'\n' -f1 file.cut
Просто используйте:
echo -n `cut ...`
Это подавляет \n в конце
cat FILE|while read line; do # 'line' is the variable name
echo "$line" # do something here
done
или (см. комментарий):
while read line; do # 'line' is the variable name
echo "$line" # do something here
done < FILE
Итак, некоторые действительно хорошие (возможно, лучшие) ответы уже были предоставлены. Но, глядя на формулировку исходного вопроса, желая использовать BASH for-loop, меня поразило, что никто не упоминал о решении с изменением IFS полевого разделителя. Это чистое решение BASH, как и принятая строка чтения
old_IFS=$IFS
IFS='\n'
for field in $(<filename)
do your_thing;
done
IFS=$old_IFS
Если вы уверены, что выход всегда будет выведен на новую строку -d, используйте head -n 1
вместо cut -f1
(обратите внимание, что вы упоминали цикл for в скрипте, и ваш вопрос был в конечном счете не связан с сценарием),
Многие другие ответы, в том числе принятые, имеют несколько строк без необходимости. Не нужно делать это по нескольким строкам или изменять разделитель по умолчанию в системе.
Кроме того, решение, предоставленное Иваном -d$'\n'
, не работало для меня ни на Mac OSX, ни на CentOS 7. Поскольку его ответ четырем годам, я предполагаю, что что-то должно было измениться по логике символа $
для этой ситуации.
Я считаю, что "cut" использует "\n" в качестве разделителя по умолчанию. Если вы хотите использовать разрез, у меня есть два пути:
cut -d^M -f1 file_cut
Я делаю ^ M Нажимая Enter после Ctrl + V. Другой способ -
cut -c 1- file_cut
Помогает ли это?