2016-10-14 1 views
0

мне нужно изменить символ новой строки не начатый " (цитата) к другому для печати слова, Как \n или <br>.Как изменить новую строку не запускается с помощью (") символ на другую строку

Я попытался это , но это не работает:

cat file.csv | sed 's/^[^\"]/\<br\>/g' 

примера входного файла:

cat file.csv 

"a","bcde","fgh 
ijk 
    mnopq 
asd" 

выход мне нужно:

cat file.csv 

"a","bcde","fgh<br>ijk<br> mnopq<br>asd" 

ответ

0

Я не думаю, что ориентация на новую строку, не следуют двойной кавычки является надежным способом сделать что ты хочешь. Например, он не обрабатывает случаи как этот:

"abc","def 
" 

более надежный способ состоит, чтобы проверить, если есть нечетное число двойных кавычек в строке, и добавить следующие строки, пока это число не станет четно, то вы можете приступить к замене:

sed -E '/^("[^"]*"[^"]*)*"[^"]*$/{:a;N;/^("[^"]*"[^"]*)*$/{s/\n/<br>/g;bb};ba;};:b;' file 

-E переключает регулярки синтаксиса в ERE (регулярное выражение)
-i изменяет содержимое файла на месте (Если вы уверены, добавьте этот переключатель)

Детали команды:

/^("[^"]*"[^"]*)*"[^"]*$/ # check if the line has an odd number of quotes 
{ # when the match succeeds: 
    :a; # define a label "a" 
    N; # append the next line to the pattern space 
    /^("[^"]*"[^"]*)*$/ # check if the pattern space contains an even number of quotes 
    { # in this case: 
     s/\n/<br>/g; # proceed to the replacement 
     bb; # go to label "b" 
    }; 
    ba; # go to label "a" 
}; 
:b; # define the label "b" 
0

Вы можете использовать условное ветвление в sed:

sed -i -E ':a;N;s~\n([^"])~<br\>\1~;ba' file.csv 

# check results  
cat file.csv 

"a","bcde","fgh<br>ijk<br> mnopq<br>asd" 

Read more about it

+0

спасибо. но у меня есть especific линия только с цитатой – Jam

+0

ABCD « „а“,» а» , что я делаю, чтобы до этой цитаты в строке 2 до конца строки 1? – Jam

+0

Не размещать какие-либо данные в других кавычках он потеряет форматирование. Лучше вы показываете новый вход, о котором идет речь, чтобы я мог его лучше понять. – anubhava

Смежные вопросы