如何替换CSV文件中所有换行符(含最后一个)
解决CSV文件所有换行符替换问题
你遇到的这个问题其实很常见——原sed命令会把整个文件读入内存后替换所有\n,但如果你的CSV文件最后一行没有以换行符结尾,那最后一行末尾就没有\n可以匹配替换,所以才会漏掉最后一行的处理。
给你几个简单可靠的解决方案:
方案一:用awk处理(最推荐)
awk对每行的处理逻辑更清晰,不管最后一行有没有换行符,都能统一处理:
awk '{printf "%s____\n", $0}' /tmp/test.csv
这个命令会把每一行的内容,加上____和换行符后输出,完美覆盖所有行,包括最后一行。
方案二:简化sed命令
如果坚持用sed,可以直接在每行末尾追加____,不需要读入整个文件:
sed 's/$/____/' /tmp/test.csv
$在sed里表示行尾(不管该行有没有换行符),这个命令会给每一行的末尾都加上____,原来的换行符会被保留,效果就是把原换行的位置变成____\n,最后一行也会被处理。
方案三:修复原sed命令
如果你想保留原命令的思路,也可以修改成这样,强制处理最后一行的情况:
sed ':a;N;$!ba;s/\n/____\n/g; /____\n$/!s/$/____\n/' /tmp/test.csv
这个命令先完成原有的全局替换,然后检查如果最后不是以____\n结尾,就给末尾补上____\n,确保所有换行(包括最后一行的结束位置)都被处理。
内容的提问来源于stack exchange,提问作者elaspog
相关产品推荐
相关产品推荐

