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

Скажем, у меня есть переменная $string shell, которая содержит некоторый текст с несколькими символами новой строки, например:

 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 ?

8 Solutions collect form web for “Использование sed для преобразования строк в строки”

Если вы хотите удалить только новые строки в строке, вам не нужно использовать 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' ' ' 

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

 string="this is a test" printf "$string" | xargs # this is a test 

Echo игнорирует пробел, поэтому он должен работать:

 new_string=`echo $string` 

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

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

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

 printf "${string//$'\n'/ }" >file 

Вы также можете попробовать эту команду 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 в одно <space> .

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

  $-sed ':loop;N;s/\n/ /g;t loop' 
  • Удаление черной полосы в sed
  • Увеличьте число, используя ssh
  • Разнообразные форматированные разрешения
  • grep-блок строк
  • Использование sed (или что-нибудь полезное) для замены строк относительным содержимым
  • Использовать команду sed с переменными
  • Сравните значения столбцов двух файлов с помощью awk
  • Как я могу сортировать файл .txt по двум столбцам?
  • Тестирование регулярного выражения из stdin с помощью grep | sed | awk
  • Обмен одной колонки из файла1 с файлами из файла2
  • Свернуть несколько повторяющихся частей последовательных строк
  • Linux и Unix - лучшая ОС в мире.