Как конкатенировать несколько строк вывода в одну строку?
Если я запустил команду 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
.
grep xargs
Ответ 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!