我有一个时髦的文件。每行以换行符结尾,第一行之后的每一行都以逗号开头。就像这样:
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