Как я могу удалить окончания строк из вывода

Команда, которую я запускаю:

locate -b '\java' | xargs -ri  find {} -prune -type f -executable | xargs bash -c '$0 -version'

Ниже приведен ответ

java version "1.6.0_41"
OpenJDK Runtime Environment (IcedTea6 1.13.13) (rhel-1.13.13.1.el6_8-x86_64)
OpenJDK 64-Bit Server VM (build 23.41-b41, mixed mode)

То, что я надеюсь сделать, это поместить все это в 1 строку.

Я пробовал различные sed и awk, но всегда возвращается как 3 строки.


person BostonMacOSX    schedule 19.02.2020    source источник
comment
Что выводит команда locate -b '\java'?   -  person anubhava    schedule 19.02.2020
comment
Будет ли вывод java -version выводиться в stdout или stderr? Покажите хотя бы один из различных сценариев sed и awk, которые вы пробовали, чтобы мы могли помочь вам понять, что с ними не так.   -  person Ed Morton    schedule 19.02.2020
comment
@EdMorton locate -b '\java' | xargs -ri find {} -prune -type f -executable | xargs bash -c '$0 -версия' | awk '{print $2}' это ничего не делает   -  person BostonMacOSX    schedule 19.02.2020
comment
Вы не ответили на мой вопрос о Is the output of java -version going to stdout or stderr? , а awk '{print $2}' будет печатать второе поле, разделенное пробелами, из каждой строки вывода, это совсем не похоже на то, что вы надеетесь сделать (т.е. объединить несколько строк в 1), если я правильно понимаю ваш вопрос.   -  person Ed Morton    schedule 19.02.2020
comment
@EdMorton Я начал с простого, чтобы посмотреть, смогу ли я увидеть какой-либо вывод на этом этапе канала ... он возвращается ни с чем, поэтому я не уверен. Я знаю, выводит ли -verion на стандартный вывод или на стандартный вывод....   -  person BostonMacOSX    schedule 19.02.2020
comment
@EdMorton locate -b '\java' | xargs -ri find {} -prune -type f -executable | xargs -i bash -c '{} -version 2›&1' | tr -d '\n' Кажется, были удалены окончания строк.   -  person BostonMacOSX    schedule 19.02.2020
comment
Да, но это удалит все окончания строк, что означает, что последовательные строки будут соединены вместе без пробела между ними, так что последняя и первая строки из каждой пары строк будут смешаны вместе, и это создаст строка, которая не является допустимым текстовым файлом в соответствии со стандартом POSIX, поэтому YMMV с тем, что любой последующий инструмент делает с этим. См. команду awk, которую я опубликовал, чтобы узнать, как заменить окончания строк пробелами, а не просто удалить их, и сохранить завершающий символ новой строки, необходимый для Текстовые строки/файлы POSIX.   -  person Ed Morton    schedule 19.02.2020
comment
Вы спрашиваете, как удалить окончания строк; вот как вы это делаете. Я не вижу в вашем вопросе указаний на то, что вы изучали это.   -  person tripleee    schedule 19.02.2020
comment
@triplee делает хорошее замечание. Вы спросили, как удалить окончания строк, тогда как я предоставил решение, которое заменит окончания строк, кроме последнего, пробелами и сохранит окончание завершающей строки. Если вы отредактируете свой вопрос, чтобы показать ожидаемый результат для трех введенных вами строк вместо того, чтобы просто описать его (Whaat i'm hoping to do iss place this all on 1 line.), который поможет устранить любую путаницу/недоразумения и многое прояснит ваши требования.   -  person Ed Morton    schedule 19.02.2020


Ответы (1)


Добавлять:

| awk '{printf "%s%s", sep, $0; sep=OFS} END{print ""}'

до конца вашего существующего пайплайна. Если это не изменит вывод, то, скорее всего, он будет stderr, а не stdout, поэтому измените приведенное выше на:

2>&1 | awk '{printf "%s%s", sep, $0; sep=OFS} END{print ""}'
person Ed Morton    schedule 19.02.2020