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

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

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

  • Использование аргументов команды sed для совместимости с GNU и BSD Unix (редактирование на месте)
  • Пунктуация заклинания Vim для ⸮
  • Используя sed, чтобы заменить только первые два регулярных выражения с разными строками
  • Получить текст между шаблоном начала и конечным шаблоном на основе шаблона между шаблоном начала и конца
  • Замените пробелы в начале строки на "-"
  • Групповая подстановка Sed добавляется в OSX, а не в ожидаемый sub в Linux
  • 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 

  • Заменить символы в строке соответствия
  • Удалить строки из файла в зависимости от строк, найденных в другом файле
  • Обновите или добавьте JAVA_HOME с sed
  • Awk удалить поле, только если числовое
  • Ошибка вывода цвета Bash
  • Как изменить переменный цвет в vim solarized theme?
  • 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 - лучшая ОС в мире.