Bash удалить перенос строки

Регулярка извлекает с файла кусок многострочного текста. Следующая задача — получить из него одну строку. Попробовал sed "s/
//" . Комбинации опробованы различные. Гуглю различные вариации обозначения знака переноса, не получается. За направление правильного гуления скажу большое спасибо ). текст — utf-8.

Или, если склеить строки (в примере выше
меняется на пробел):

Проблема: нам нужно через sed заменить символы перевода строки какими-то другими символами (например, пробелами). Но что делать — sed не воспринимает запись escape-последовательности вида
и не хочет с нами дружить.

Да, в мануале к sed так и написано — оно не будет работать с
в своих выражениях. Но есть обходной путь — использовать конструкцию tr:

Как видим, tr успешно заменил символ перевода строки
на знаки подчеркивания, с которыми уже сумеет справиться sed.

Возможна и обратная ситуация — когда какие-то символы нужно заменить на перевод строки. Вот пример:

Вопросы и ответы

Последние комментарии

Согласно Same-origin policy не передаются куки в следующих случаях

1. включено обязательное шифрование
2. не разрешены кросдоменные запросы между разными доменами
3. на одном и том же хосте выполняются запросы на разные порты ( при этом куки могут быть и доступными хостам на разных портах и вооще теряться от одного из хостов порт)
4. не разрешено передача куки на поддомен , при его указании или не указании заголовке
5. значение куки просрочено

пути решения:
1) подробное описание проблемы в спецификациях RFC 6265, RFC 2109 и RFC 2965, RFC2109 4.3.1
2) пробуйте разрешить кроссдоменные запросы XMLHttpRequest.withCredentials
3) пробуйте изменить запросы с разных хостов например если запущены 2 сервера на одном локальном хосте но на разных портах, то можно использовать вместо

Читайте также:  Как вернуть верхнюю строку в ворде

можно использовать (например из адресной сроки доступ не по хосту а по ip, а аякс запросы будут выполнятся иначе)

localhost:8080
127.0.0.1:8080
[::1]:8080
::1:8000

при выгрузке случился баг и после data3 добавился знак переноса строки
и все сьехало на две строки. data3 обрамлен " (двойные ковычки) файл очень большой 1 мил строк и в ручную не вариант переделывать подскажите как через sed убрать перенос строки для того чтобы сьехавший хвост вытянулся в одну строку сейчас файл имеет такой вид

а должен быть таким

Ответы (4)

тут может попробуете команду tr ?

sed хорошо, но советуют tr

  1. :a создание метки ‘a’
  2. N добавить следующую строку в формат
  3. $! если не конец строки переход в метку ‘a’
  4. s substitute, /",n/ regex для кавычки-запятой-новой_строки, /",/ заменить с кавычки-запятой, /g замена глобальная (сколько раз есть, столько работай)

У меня вроде работает:

Для более сложных случаев (возможны «обыкновенные» строки) попробуйте так:

Внимение: последняя строка должна заканчиваться переводом строки, иначе она будет «проглочена»!

Объяснение: нам необходимо, когда мы видим строку, начинающуюся с кавычки, знать предыдущую строку, чтобы склеить их. Для этого мы «задерживаем» вывод строк, отправляя их в hold space вместо вывода, и выводя вместо этого предыдущую строку, лежащую там же ( x ).

Для случая, когда строка начинается с кавычки ( /^"/ ) начинаем действовать. В hold space лежит предыдущая строка, пристыковываем к ней текущую ( H ), и обмениваем hold space с pattern space ( x ), чтобы можно было обработать текст. Удаляем
( s/
// ), и отправляем назад строку в hold space, чтобы проанализировать и вывести её на следующем цикле. Обрубок строки, который получился в pattern space, удаляем, и завершаем эту итерацию ( d ).

Читайте также:  Приват вход в систему для физических лиц

если структура получившегося файла точно соответстует приведённому примеру (надо объдинить 1 и 2 строку, 3 и 4 и т.д.), то выражение можно упростить, примерно как в соседнем ответе:

объяснение: для всех нечётных строк будет:

  • прочитана следующая строка в конец pattern space
  • из pattern space будет удалён символ перевода строки
    между этими двумя строками

Мне проще написать такое на sh (или Си).

Объединяем строки, если после заданного текста был вставлен
:

IFS="" заставляет sh (или bash) не разбивать строку на слова, а ключ -r говорит read, что backslash это обычный символ (см. man 1 read ).