搜索并用逗号换行符替换换行符

搜索并用逗号换行符替换换行符

我有一个时髦的文件。每行以换行符结尾,第一行之后的每一行都以逗号开头。就像这样:

blah blah blah
,more blah blah blah
,even more blah blah blah

我只是想交换逗号和换行符:

blah blah blah,
more blah blah blah,
even more blah blah blah

它只有几千行长,所以我尝试在 VI 中完成它。我尝试过各种组合,但没有任何效果。我想这可能很接近吧?

%s//\n,/,/\n/g

但我收到有关尾随字符的错误。我确信我弄乱了分隔符和转义字符,但我不知道哪里出了问题。

编辑:我假设它以 \n 结尾,而不是 \r 。如果我执行 :set list ,则每行以 $ 结尾。

答案1

我用 GNU 想出了这个sed

sed -Ee 's/^[,]*(.*)$/\1,/' -e '$s/,$//' file

或者在文件中替换:

sed -i -Ee 's/^[,]*(.*)$/\1,/' -e '$s/,$//' file

出现 0 次或多次的行开头,

^[,]*

捕获从那里到行尾的模式:

(.*)$

替换为捕获的模式并,在末尾添加:

\1, 

删除,las 行中的:

-e '$s/,$//'

答案2

我只是想交换逗号和换行符

使用 Perl 确实可以做到这一点:

perl -0 -pe 's/\n,/,\n/g' file.txt

答案3

如果您有 GNU ,如果文件适合内存,则sed可以使用-z/选项:--null-data

sed -z 's/\n,/,\n/g' file

答案4

使用 sed - 使用N...P;D循环来维护 2 行缓冲区:

$ sed -e '$!N;s/\n,/,\n/' -e 'P;D' file
blah blah blah,
more blah blah blah,
even more blah blah blah

相关内容