Если Вы просто хотите протестировать зависимости, pbuilder (или cowbuilder, который добавляет COW и немного быстрее для запуска), chroot среда, настроенная для создания пакетов, работал бы очень хорошо.
Если Вы захотите обработать недоверяемые пакеты, то Вам будут нужны LXC или полная виртуализация. LXC берет некоторую конфигурацию, но может быть обработан libvirt, если Вы хотите высокий уровень изоляции; Вам все еще нужен к debootstrap он самим, как я вспоминаю. Для полной виртуализации vmbuilder имеет debian версию, которая готовит и настраивает изображения. Так как Вам не нужна гибкость LXC, я рекомендую pbuilder или vmbuilder + kvm.
Если Вы только хотите удалить новые строки в строке, Вы не должны использовать 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
Вы могли попытаться использовать tr
вместо этого:
echo "$string" | tr '\n' ' '
Эхо игнорирует пробел, таким образом, это должно работать:
new_string=`echo $string`
Если у Вас уже есть строка как переменная удара, поскольку Ваш пример показывает, это бессмысленно и расточительно из ресурсов (и больше ввода) звонить sed
, awk
, printf
, и т.д... Можно просто использовать расширение переменной удара:
string="${string//$'\n'/ }"
Вы не должны даже повторно присваивать его. Можно использовать как есть расширение и отпуск $string
неизменный.
printf "${string//$'\n'/ }" >file
Еще одна опция состояла бы в том, чтобы использовать xargs
(который, кроме того, сжимает несколько пробел):
string="this
is
a test"
printf "$string" | xargs # this is a test
Вы также можете попробовать эту команду 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.
state=$(set +o)
set -f ; IFS='
'; set -- $string
unset IFS; string="$*"
eval "$state"
Это преобразует любую последовательность одного или нескольких \n
символов Ewline, встречающихся в переменной оболочки $string
, в единую <пробел>
.
Вы можете использовать простую команду sed
$-sed ':loop;N;s/\n/ /g;t loop'
sponge
полезная утилита для перезаписи входного файла. Это - часть пакетаmoreutils
... например.awk '$1=$1' ORS=' ' file |sponge file
– Peter.O 14.12.2011, 08:17moreutils
... – pferor 14.12.2011, 15:25