Самые быстрые и простые способы, которые я знаю, чтобы решить эту проблему:
Когда мы хотим заменить символ новой строки \n
пробелом :
xargs < file
xargs
имеет собственные ограничения на количество символов в строке и количество всех символов в сочетании, но мы можем увеличить их. Подробности можно узнать, выполнив эту команду: xargs --show-limits
и, конечно, в руководстве:man xargs
Когда мы хотим заменить один символ другим точно таким же :
tr '\n' ' ' < file
Когда мы хотим заменить один символ на множество символов :
tr '\n' '~' < file | sed s/~/many_characters/g
Сначала мы заменяем символы новой строки \n
для тильд ~
(или выбираем другой уникальный символ, отсутствующий в тексте), а затем заменяем символы тильды любыми другими символами ( many_characters
) и делаем это для каждой тильды (флага g
).
sed
скрипт в одинарные кавычки, чтобы Bash не связывался с ним (так какsed s/\n/ /g
вызываетsed
с двумя аргументами, а именноs/n/
и/g
); (2) , так как вы хотите выходcat file | grep pattern
быть вход вsed
, а не аргументы вsed
, необходимо устранитьxargs
; и (3) здесь нет необходимостиcat
, поскольку онgrep
может принимать имя файла в качестве второго аргумента. Итак, вы должны были попробоватьgrep pattern file | sed 's/\n/ /g'
. (В этом случае это не сработало бы по причинам, указанным в приведенной выше ссылке, но теперь вы знаете, на будущее.)