Самые быстрые и простые способы, которые я знаю, чтобы решить эту проблему:
Когда мы хотим заменить символ новой строки \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'. (В этом случае это не сработало бы по причинам, указанным в приведенной выше ссылке, но теперь вы знаете, на будущее.)