Вызывать команду newline

У меня есть файл вроде этого:

one
two 
three 
four

Я хотел бы использовать цикл for в bash script для сканирования строки строки для строки. Раньше я использовал cut, но я не смог дать команде cut разделитель новой строки, как я могу это сделать?

Таким образом, это не работает:

cut -d'\n' -f1

Любое предложение?

Ответы

Ответ 1

Используйте cat для конкатенации или отображения. Здесь нет необходимости:

while read line ; do
    echo "$line"
done < file

Ответ 2

Я оказался в той же самой проблеме, это работает для меня:

cat file.cut | cut -d$'\n' -f1

Или:

cut -d$'\n' -f1 file.cut

Ответ 3

Просто используйте:

echo -n `cut ...`

Это подавляет \n в конце

Ответ 4

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

Ответ 5

Итак, некоторые действительно хорошие (возможно, лучшие) ответы уже были предоставлены. Но, глядя на формулировку исходного вопроса, желая использовать BASH for-loop, меня поразило, что никто не упоминал о решении с изменением IFS полевого разделителя. Это чистое решение BASH, как и принятая строка чтения

old_IFS=$IFS
IFS='\n'
for field in $(<filename)
do your_thing;
done
IFS=$old_IFS

Ответ 6

Если вы уверены, что выход всегда будет выведен на новую строку -d, используйте head -n 1 вместо cut -f1 (обратите внимание, что вы упоминали цикл for в скрипте, и ваш вопрос был в конечном счете не связан с сценарием),

Многие другие ответы, в том числе принятые, имеют несколько строк без необходимости. Не нужно делать это по нескольким строкам или изменять разделитель по умолчанию в системе.

Кроме того, решение, предоставленное Иваном -d$'\n', не работало для меня ни на Mac OSX, ни на CentOS 7. Поскольку его ответ четырем годам, я предполагаю, что что-то должно было измениться по логике символа $ для этой ситуации.

Ответ 7

Я считаю, что "cut" использует "\n" в качестве разделителя по умолчанию. Если вы хотите использовать разрез, у меня есть два пути:

    cut -d^M -f1 file_cut

Я делаю ^ M Нажимая Enter после Ctrl + V. Другой способ -

    cut -c 1- file_cut

Помогает ли это?