Заменить запятую на новую строку в sed



У меня есть файл идентификаторов, которые разделены запятыми. Я пытаюсь заменить запятые на новую строку. Я пробовал:



sed 's/,/n/g' file


но это не работает. Чего мне не хватает?

608   12  

12 ответов:

использовать tr вместо:

tr , '\n' < file

использовать $'string'

вам нужна обратная косая черта-экранированная литеральная новая строка, чтобы добраться до sed. По крайней мере, в Баш,$'' строки заменят \n С реальной новой строкой, но тогда вам нужно удвоить обратную косую черту, которую sed увидит, чтобы избежать новой строки, например

echo "a,b" | sed -e $'s/,/\\n/g'
sed 's/,/\
/g'

работает на Mac OS X.

Если ваше использование 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

чтобы сделать его полным, это тоже работает:

echo "a,b" | sed "s/,/\$(echo -e '\n\r')/"

MacOS отличается, есть два способа решить эту проблему с sed в mac

  • во-первых ,использовать \'$'\n'' заменить \n, он может работать в MacOS:

    sed 's/,/\'$'\n''/g' file
    
  • второй, просто используйте пустую строку:

    sed 's/,/\
    /g' file
    
  • Ps. Обратите внимание на диапазон, разделенный '

хотя я опаздываю на этот пост, просто обновляю свои выводы. Этот ответ только для 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

    Ничего не найдено.