accepted answer была помечена как таковой из-за Perl команды он содержит.
Команда sed
фактически не работает на OSX, поскольку он использует возможности, специфичные для GNUsed
, в то время как OSX использовать BSDsed
.
эквивалент ответ требует лишь несколько ухищрений - обратите внимание, что это будет работать с как BSD и GNU sed
:
Использование Множественные -e
варианты:
sed -e ':a' -e '$!{N;ba' -e '}; s/"\n"//g' <in> out
Или , используя ANSI C-quoted string в Bash:
sed $':a\n$!{N;ba\n}; s/"\\n"//g' <in> out
Или, используя многострочного строку буквального:
sed ':a
$!{N;ba
}; s/"\n"//g' <in> out
BSD sed
требует этикеток (например, :a
) и ветвление команд (например, b
) должен быть прекращен с актуальной новостной линией (тогда как в GNU достаточно ;
), или, альтернативно, для сценария, который должен быть b roken в несколько опций -e
, причем каждая часть заканчивается, когда требуется новая строка.
Более подробное обсуждение различий между GNU и BSD sed
см https://stackoverflow.com/a/24276470/45375
$':a\n$!{N;ba\n}'
является общим sed
идиомы для чтения всех входных строк в так называемом шаблоне (буфер, на котором (последующие) команды работают):
:a
представляет собой метку, которая может быть разветвленной, чтобы
$!
матчей каждая строка но л AST
{N;ba\n}
продолжает строить буфер, добавив текущую строку (N
) к нему, а затем обратно ветвления для обозначения :a
повторить цикл.
- После последней линии достигнута, не ветвящийся не выполняются, и буфер в этой точке содержит всех входных линии, после чего желаемого замещения (
s/"\n"//g
) осуществляются на весь буфере.
Что касается почему подход OP не работал:
sed
читает файлы построчно по умолчанию, так что по умолчанию он может работать только на по одной строке время.
Для того, чтобы подменять новыми символами. - т. е., для работы через несколько строк - вы должны явно прочитать несколько/все строки сначала, как указано выше.
Возможный дубликат [Как заменить новую строку (\ n) с помощью sed?] (Http://stackoverflow.com/questions/1251999/how-can-i-replace-a-newline-n-using- sed) – NeronLeVelu
вы, вероятно, хотите unix2dos, см. http://stackoverflow.com/a/6373961/297323 –
Вы имеете в виду «в конце строки, буквальной новой строки и буквы» в начале следующей строки или вы имеете в виду эти четыре символа буквально? –