2016-03-02 5 views
1

У меня есть CSV-файл со следующим содержимым:Баша вставить новую строку перед конкретным шаблоном

"user1","track1","player1" "user1","track2","player2" "user2","track1","player1""user2","track2","player2"..... 

Мне нужно вставить новую строку перед этой моделью: "user. На самом деле в начале я заменил все пространство с новой строкой с этой командой

awk -v RS=" " '{print}' myfile >output.csv 

, но потом я обнаружил, что в некоторых точках в моем файле, там нет места перед некоторыми пользователями, и когда я impoted в Д.Б. значения столбцов менялись местами в этих точках ...: |. Так что мне было интересно, если кто-то знает, как я мог вставить новую строку перед определенным набором символов, чтобы избежать этой проблемы ..

Спасибо,

+0

Является ли весь файл только одной строкой? – dawg

+0

@ dawg: да, его очень длинная 1 линия – mOna

ответ

1

С GNUsed вы можете попробовать это:

sed -r 's/(.)("user)/\1\n\2/g' myfile >output.csv 

с BSD/OSX sed (которым не поддерживает последовательность \n экранирования в строке замены, используя ANSI C-quoted string строку), используйте:

sed -E $'s/(.)("user)/\\1\\\n\\2/g' myfile >output.csv 

# Alternative, with the ANSI C-quoted quoted string spliced in only where needed. 
sed -E 's/(.)("user)/\1\'$'\n''\2/g' myfile >output.csv 

С строго POSIX-совместимых sed, использовать буквальный символ новой строки вместо управляющей последовательности \n:

sed 's/\(.\)\("user\)/\1\ 
\2/g' myfile >output.csv 

Обратите внимание, что с помощью ввода пробы несколько строк будет иметь косую пространство.

+0

Спасибо за ваш ответ. первый вставил n вместо новой строки: | – mOna

+0

Это означает, что вам нужно использовать форму 2-й команды; вы на OSX? – mklement0

+0

да, .. должен ли я использовать вторую форму за 2 шага? – mOna

1

С awk

awk '{gsub(/"user/,"\n\"user"); print}' file 

Это будет иметь ведущую CR в нем, если файл начинается с "user

Если вы хотите, чтобы избавиться от этого, вы можете сделать:

awk '{gsub(/"user/,"\n\"user"); sub(/^\n/,""); print}' file 
+0

спасибо за ваш ответ, и ваш ответ сработал для меня .. извините, я не мог принять два ответа: | – mOna