Скажем, у меня есть переменная оболочки, $string
которая содержит некоторый текст с несколькими символами новой строки, например:
string="this
is
a test"
Я хотел бы преобразовать эту строку в новую строку, new_string
где все разрывы строк конвертируются в пробелы:
new_string="this is a test"
Я пытался:
print $string | sed 's/\n/ /g'
но это не сработало
Мне также интересно, есть ли способ сделать это с помощью perl -0777 's/\n/ /g'
или, может быть, команда tr
?
Ответы:
Если вы хотите удалить только новые строки в строке, вам не нужно использовать
sed
. Вы можете использовать толькокак указывали другие.
Но если вы хотите преобразовать новые строки в пробелы в файле, используя
sed
, то вы можете использовать:или даже
awk
:источник
sponge
полезная утилита для перезаписи входного файла Это часть пакетаmoreutils
... например.awk '$1=$1' ORS=' ' file |sponge file
moreutils
...Вы можете попробовать использовать
tr
вместо этого:источник
Еще один вариант будет использовать
xargs
(который, кроме того, сжимает несколько пробелов):источник
Эхо игнорирует пробелы, поэтому должно работать:
источник
Если у вас уже есть строка в качестве переменной Баш, как ваш пример показывает, что это бессмысленно и расточительно ресурсов (и более типирования) для вызова
sed
,awk
,printf
и т.д. ... Вы можете просто использовать расширение Баш переменной :Вам даже не нужно переназначать его. Вы можете использовать расширение как есть и оставить
$string
без изменений.источник
Вы также можете попробовать эту команду awk,
Пример:
источник
Это преобразует любую последовательность из одного или нескольких
\n
символов ewline, встречающихся в переменной оболочки,$string
в один<space>
.источник
Вы можете использовать простую команду sed
источник