如何在bash命令行中使用 Perl 和/或Sed删除新行但避免使用一组特定字符?
我最接近的是:
perl -C -i -p -e 's/[^.:]\n//' ~/Desktop/bak2
上面的代码在避免删除以点或冒号结尾的行方面效果很好,但是它很有意义,因为当删除正确的新行时,它也会删除字符串的最后一个字符。我还需要将删除的\ n替换为空格。
如果可能的话,由Perl和Sed提供此解决方案会很棒。 我已经在perl或sed中搜索了类似的解决方案,但我还没有找到它,如果确实存在则对不起。
示例:
现有内容:
紫罗兰是蓝色的
布达有很好的教诲。编程很简单,因为:
存在Stackoverflow,
社区总是帮助
很多。
期望的输出:
紫罗兰是蓝色的,布达有很好的教诲。
编程很简单,因为:
Stackoverflow存在,社区总是帮助很多。
答案 0 :(得分:0)
您可以保留新的前线匹配(我添加了“空”线处理):
perl -C -i -p -e 's/(^|[^.:])\n/$1/' ~/Desktop/bak2
或使用正面看法
perl -C -i -p -e 's/(?<=[^.:])\n//' ~/Desktop/bak2
答案 1 :(得分:0)
perl -i pe 's/[^.:]\K\n/ /' ~/Desktop/bak2
答案 2 :(得分:0)
使用sed
sed -e ':A;/[^.:]$/{N;bA' -e '};y/\n/ /' ~/Desktop/bak2
或gnu sed
sed -z 's/\([^.:]\)\n/\1 /g' ~/Desktop/bak2