Как конкатенировать несколько строк вывода в одну строку?

Если я запустил команду cat file | grep pattern, я получаю много строк вывода. Как вы объединяете все строки в одну строку, эффективно заменяя каждый "\n" на "\" " (заканчивающийся на ", за которым следует пробел)?

cat file | grep pattern | xargs sed s/\n/ /g не работает для меня.

Ответ 1

Используйте tr '\n' ' ' для перевода всех символов новой строки в пробелы:

$ grep pattern file | tr '\n' ' '

Примечание: grep считывает файлы, cat объединяет файлы. Не cat file | grep!

Edit:

tr может обрабатывать только одиночные переводы символов. Вы можете использовать awk для изменения разделителя выходной записи, например:

$ grep pattern file | awk '{print}' ORS='" '

Это изменит:

one
two 
three

в

one" two" three" 

Ответ 2

Вывод конвейера на xargs объединяет каждую строку вывода в одну строку с пробелами:

grep pattern file | xargs

Или любая команда, например. ls | xargs. Предел по умолчанию для вывода xargs составляет ~ 4096 символов, но может быть увеличен, например. xargs -s 8192.

Ответ 3

В bash эхо без кавычек удалите кавычки, вкладки и несколько пробелов

echo $(cat file)

Ответ 4

Это может быть то, что вы хотите

cat file | grep pattern | paste -sd' '

Что касается вашего редактирования, я не уверен, что это значит, возможно, это?

cat file | grep pattern | paste -sd'~' | sed -e 's/~/" "/g'

(это предполагает, что ~ не встречается в file)

Ответ 5

Вот метод, использующий редактор ex:

  • J для всех строк и p rint для стандартного вывода:

    $ ex +%j +%p -scq! file
    
  • J во всех строках на месте (в файле):

    $ ex +%j -scwq file
    

    Примечание. Это приведет к конкатенации всех строк внутри файла it-self!