Я делаю grep и sed, и я получаю 2 строки файла, который меня интересует. Как я могу получить эти строки в одной строке, заканчивающейся символом новой строки?
Теперь я получаю:
pattern1
pattern2
Я хотел бы получить pattern1 pattern2 \n
Я делаю grep и sed, и я получаю 2 строки файла, который меня интересует. Как я могу получить эти строки в одной строке, заканчивающейся символом новой строки?
Теперь я получаю:
pattern1
pattern2
Я хотел бы получить pattern1 pattern2 \n
printf %s\\n pattern1 pattern2 | sed '$!N;s/\n/ /'
Ответы:
paste
:Это говорит: «прочитать строку из stdin (первый
-
), прочитать другую строку из stdin (второй-
), а затем соединить их пробелом»специфичная для bash техника:
ссылка: http://www.gnu.org/software/bash/manual/bashref.html#index-mapfile
источник
- -
? Команда такая?paste
как вы хотите, чтобы он обрабатывал ввод. 2 за один раз. Добавьте больше, чтобы сделать 3 одновременно.seq 10 | paste -d " " - -
,Я поставлю три версии разных методов подряд
AWK
SED
TR
И еще много.
источник
tr
Решение проглотит окончание новой строки, так что вы можете добавить; echo
к этому одинВы можете сделать это с помощью сценария оболочки или в командной строке, просто поместите вывод команды в переменную, затем
echo
:источник
*
или?
), значения могут измениться.$()
вместо этого ... и используя printfprintf '%s\n' "$x"
printf '%s\n' "$x"
это НЕ удалит «внутренний» перевод строки.С помощью
sed
вы можете сделать это:N;
говорит,sed
чтобы добавить следующую строку в пространство шаблона, так что теперьsed
работает с обеими линиями.s/\n/ /
заменяет символ новой строки пробелом, объединяя две строки вместе.источник
Простой способ, труба на выходе
xargs
:Это работает только с небольшим выходом, потому что оно ограничено максимальным количеством символов в командной строке. Наибольшее значение зависит от системы, вы можете получить это значение, используя
getconf ARG_MAX
.источник
IFS будет рад съесть его, если вы хотите.
источник
оберните ваш сед / grep в спину
когда ваша оригинальная команда была:
ваша новая команда будет:
Не получает пробелов между строками, но вы всегда можете использовать другую трубу sed:
источник