12 ответов:
использовать
$'string'вам нужна обратная косая черта-экранированная литеральная новая строка, чтобы добраться до sed. По крайней мере, в Баш,
$''строки заменят\nС реальной новой строкой, но тогда вам нужно удвоить обратную косую черту, которую sed увидит, чтобы избежать новой строки, напримерecho "a,b" | sed -e $'s/,/\\n/g'
Если ваше использование sed имеет тенденцию быть полностью замещающими выражениями (как и мое), вы также можете использовать perl-pe вместо
$ echo 'foo,bar,baz' | perl -pe 's/,/,\n/g' foo, bar, baz
это работает на MacOS Mountain Lion (10.8), Solaris 10 (SunOS 5.10) и RHE Linux (Red Hat Enterprise Linux Server release 5.3, Tikanga)...
$ sed 's/{pattern}/\^J/g' foo.txt > foo2.txt... где же
^Jделается путем выполнения ctrl+v+j. Не обращайте внимания\до^J.PS, Я знаю, что sed в RHEL-это GNU, macOS sed основан на FreeBSD, и хотя я не уверен в Solaris sed, я считаю, что это будет работать в значительной степени с любым sed. МММ Тхо...
видимо
\r- ключ!$ sed 's/, /\r/g' file3.txt > file4.txtпреобразовать этот:
ABFS, AIRM, AMED, BOSC, CALI, ECPG, FRGI, GERN, GTIV, HSON, IQNT, JRCC, LTRE, MACK, MIDD, NKTR, NPSP, PME, PTIX, REFR, RSOL, UBNT, UPI, YONG, ZEUSдля этого:
ABFS AIRM AMED BOSC CALI ECPG FRGI GERN GTIV HSON IQNT JRCC LTRE MACK MIDD NKTR NPSP PME PTIX REFR RSOL UBNT UPI YONG ZEUS
MacOS отличается, есть два способа решить эту проблему с sed в mac
во-первых ,использовать
\'$'\n''заменить\n, он может работать в MacOS:sed 's/,/\'$'\n''/g' fileвторой, просто используйте пустую строку:
sed 's/,/\ /g' filePs. Обратите внимание на диапазон, разделенный
'
хотя я опаздываю на этот пост, просто обновляю свои выводы. Этот ответ только для Mac OS X.
$ sed 's/new/ > /g' m1.json > m2.json sed: 1: "s/new/ /g": unescaped newline inside substitute patternВ приведенной выше команде я попытался с помощью Shift+Enter, чтобы добавить новую строку, которая не работает. Поэтому на этот раз я попытался "избежать" "unescaped newline", как сказано в ошибке.
$ sed 's/new/\ > /g' m1.json > m2.jsonработала! (в Mac OS X 10.9.3)
просто чтобы прояснить: man-страница sed на OSX (10.8; Darwin Kernel Version 12.4.0) говорит:
[...]
Sed Регулярные Выражения
The regular expressions used in sed, by default, are basic regular expressions (BREs, see re_format(7) for more information), but extended (modern) regular expressions can be used instead if the -E flag is given. In addition, sed has the following two additions to regular expressions: 1. In a context address, any character other than a backslash (``\'') or newline character may be used to delimit the regular expression. Also, putting a backslash character before the delimiting character causes the character to be treated literally. For example, in the context address \xabc\xdefx, the RE delimiter is an ``x'' and the second ``x'' stands for itself, so that the regular expression is ``abcxdef''. 2. The escape sequence \n matches a newline character embedded in the pattern space. You cannot, however, use a literal newline charac- ter in an address or in the substitute command.[...]
поэтому я думаю, что нужно использовать tr - как упоминалось выше-или изящный
sed "s/,/^M /g"Примечание: Вы должны ввести ctrl> - v,вернуться> чтобы получить '^M ' в Редакторе vi
FWIW, следующая строка работает в windows и заменяет точку с запятой в переменных моего пути новой строкой. Я использую инструменты, установленные в моем каталоге git bin.
echo %path% | sed -e $'s/;/\n/g' | less
мы можем сделать это и в sed.
вы можете попробовать это,
sed -i~bak 's/\,/\n/g' file-Я - буду менять модификацию в файл.Будьте осторожны, чтобы использовать эту опцию.
Я надеюсь, что это поможет вам.
Comments