Используя sed для преобразования новых строк в пробелы

Если Вы просто хотите протестировать зависимости, pbuilder (или cowbuilder, который добавляет COW и немного быстрее для запуска), chroot среда, настроенная для создания пакетов, работал бы очень хорошо.

Если Вы захотите обработать недоверяемые пакеты, то Вам будут нужны LXC или полная виртуализация. LXC берет некоторую конфигурацию, но может быть обработан libvirt, если Вы хотите высокий уровень изоляции; Вам все еще нужен к debootstrap он самим, как я вспоминаю. Для полной виртуализации vmbuilder имеет debian версию, которая готовит и настраивает изображения. Так как Вам не нужна гибкость LXC, я рекомендую pbuilder или vmbuilder + kvm.

22
31.05.2014, 17:23
8 ответов

Если Вы только хотите удалить новые строки в строке, Вы не должны использовать sed. Можно использовать просто

$  echo "$string" | tr '\n' ' '

поскольку другие указали.

Но если Вы хотите преобразовать новые строки в пробелы на использовании файла sed, затем можно использовать:

$ sed -i ':a;N;$!ba;s/\n/\t/g' file_with_line_breaks

или даже awk:

$ awk '$1=$1' ORS=' ' file_with_line_breaks > new_file_with_spaces
32
27.01.2020, 19:42
  • 1
    sponge полезная утилита для перезаписи входного файла. Это - часть пакета moreutils ... например. awk '$1=$1' ORS=' ' file |sponge file –  Peter.O 14.12.2011, 08:17
  • 2
    @ferer спасибо за информацию. Установка moreutils... –  pferor 14.12.2011, 15:25

Вы могли попытаться использовать tr вместо этого:

echo "$string" | tr '\n' ' '
5
27.01.2020, 19:42

Эхо игнорирует пробел, таким образом, это должно работать:

new_string=`echo $string`
3
27.01.2020, 19:42
  • 1
    Да, это будет работать, но возможно слишком хорошо. Это свернет много пробел к одиночному пробелу. Это включает ВКЛАДКИ преобразования в пробелы. –  Peter.O 14.12.2011, 08:10

Если у Вас уже есть строка как переменная удара, поскольку Ваш пример показывает, это бессмысленно и расточительно из ресурсов (и больше ввода) звонить sed, awk, printf, и т.д... Можно просто использовать расширение переменной удара:

string="${string//$'\n'/ }"

Вы не должны даже повторно присваивать его. Можно использовать как есть расширение и отпуск $string неизменный.

printf "${string//$'\n'/ }" >file
3
27.01.2020, 19:42

Еще одна опция состояла бы в том, чтобы использовать xargs (который, кроме того, сжимает несколько пробел):

string="this
    is 
a    test"

printf "$string" | xargs   # this is a test
4
27.01.2020, 19:42

Вы также можете попробовать эту команду awk,

awk -v RS="" '{gsub (/\n/," ")}1' file

Пример:

$ (echo This; echo is; echo a; echo test.) | awk -v RS="" '{gsub (/\n/," ")}1'
This is a test.
3
27.01.2020, 19:42
state=$(set +o)
set -f ; IFS='
'; set -- $string
unset IFS; string="$*"
eval "$state"

Это преобразует любую последовательность одного или нескольких \n символов Ewline, встречающихся в переменной оболочки $string, в единую <пробел>.

1
27.01.2020, 19:42

Вы можете использовать простую команду sed

 $-sed ':loop;N;s/\n/ /g;t loop'
0
27.01.2020, 19:42

Теги

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