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

У меня есть 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 regex для поиска строк, содержащих string1 AND string2
  • Как выравнивать столбцы нескольких строк на фиксированном расстоянии с помощью vim
  • Vim auto line-break работает не так, как ожидалось (обновление: проблема с неокомплектом)
  • Vim заменить в визуальном режиме
  • Могу ли я ускорить вставку в vim?
  • Как перейти к списку каталогов из файла в vim?
  • 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 - лучшая ОС в мире.