@kablihin

Почему не заменяет перенос строки на пробел?

Хочу написать запрос speedtest в виде:
Download: N Mbit/s Upload: N Mbit/s
Получился вот такой запрос:
speedtest --simple | sed '1d' | sed -e '/\n\/\s/g'

Но почему ентер не меняется на пробел.
  • Вопрос задан
  • 113 просмотров
Решения вопроса 4
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
sed -e '/\n\/\s/g'
Но почему ентер не меняется на пробел.

Что тут вообще написано? Судя по g в конце имелось в виду 's/\n/ /g'?
Не работает потому что sed читает ввод построчно и конец строки как символ обычно не попадает в паттерн спейс. Но есть команда N которая добавляет \n и следующую строку к уже прочитанной: speedtest --simple | sed '1d;N;s/\n/ /g'
Ответ написан
sfi0zy
@sfi0zy
Creative frontend developer
sed имеет своеобразное представление о том, что такое "новая строка", можно попробовать опцию -z:

speedtest --simple | sed '1d' | sed -z 's/\n/ /g'
Ответ написан
Комментировать
xotkot
@xotkot
хорошо есть и хорошо весьма
speedtest --simple |awk 'BEGIN{RS="";FS="\n"}{print $2" "$3}'

где
RS - разделитель строк
FS - разделитель полей
Ответ написан
Комментировать
проще всего (и короче ) для новых строк использовать tr

для удаления символа переноса

echo -e "a\nb\nc\nd\ne\nf\ng\nh" | tr -d '\n'
abcdefgh
или конвертации в пробелы
echo -e "a\nb\nc\nd\ne\nf\ng\nh" | tr '\n' ' '
a b c d e f g h
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы