Как найти и заменить новую строку?

У меня есть CSV, разделенный запятыми, и вместо этого я хочу разграничить его на новые строки.

Входные данные:

a, b, c 

Вывод:

 a b c 

Я написал парсеры Java, которые делают это, но не могли ли это сделать с помощью vim или какого-нибудь другого инструмента?

sed не работает для меня:

 #!/bin/sh # Start cat > infile.csv << __EOF__ a, b, c __EOF__ cat infile.csv sed 's/, /\n/g' infile.csv > outfile.csv cat outfile.csv 

  • Консольное содержимое файла горизонтально в vi / vim
  • Карта VIM не работает
  • Машина сохраняет резервные копии файлов, которые я уже удалил
  • Настройка Powerline в vim
  • Vim и унифицированные разности
  • Как я могу вызвать vi вместо vim
  • vim install на freebsd занимает 5 часов и подсчитывает
  • Как разрешить Page Up на экране GNU?
  • 4 Solutions collect form web for “Как найти и заменить новую строку?”

    Как и ответ Иэна , вы также можете использовать tr :

     $ echo a,b,c | tr ',' '\n' a b c 

    Оба ответа предполагают, что CSV прост (т. Е. Все запятые являются разделителями полей). Если у вас есть что-то вроде a,"b,c",d где b,c – одно поле, тогда все становится сложнее

    Похоже, что другие ответы достигают того, чего вы хотите, а скриптовый инструмент кажется наиболее подходящим выбором.

    Но вы спросили о vim, так вот как вы это делаете:

     %s/, /\r/g 

    То есть, замените каждое запятое + пробел возвратом каретки. Затем это будет интерпретироваться как соответствующий символ окончания строки для файла. (Вы можете проверить это, выполнив поиск \r – он не будет найден).

    Использование \n в тексте замены s в sed разрешено, но не обязано, POSIX. GNU sed делает это, но есть реализации, которые выводят \n буквально.

    Вы можете использовать любой awk, совместимый с POSIX. Установите разделитель полей ввода в регулярное выражение и разделитель выходных полей ORS в строку (с обычными обратными слэшами). Назначение $1=$ необходимо для перестройки линии для использования разного разделителя полей.

     awk -vFS=', *' -vOFS='\n' '{$1=$1; print}' 

    (Это предполагает, что ваш ввод содержит простые значения, разделенные запятыми и пробелами, без кавычек. Если есть кавычек, вам нужно перейти к реальному парсеру CSV на языке, таком как Perl или Python.)

    Если ваш файл разделен символом ',' (запятые, а затем пробел), то

    sed 's/, /\n/g' filename.csv >newfile

    будет выполнять эту работу. Если его разделили на «,» (запятые без пробелов), тогда

    sed 's/,/\n/g' filename.csv >newfile

    будет работать.

    или измените \n на \o12 если ваш вкус sed не понравится.

    Linux и Unix - лучшая ОС в мире.