如何在脚本中添加虚拟换行使文件总为2行且末尾自带换行符
实现方法
首先你需要明确Unix系系统的文本行定义:每一行的标准结构是「行内容 + 换行符(\n)」,你以为加了末尾换行就变成3行,其实是绝大多数编辑器的显示逻辑会把末尾换行后的位置单独显示为一行,实际行计数是符合要求的。你可以用wc -l 文件名命令验证实际行数,这个命令的统计逻辑是按换行符计数,符合标准行定义。
方案1:直接生成符合要求的2行脚本
比如你要生成的脚本2行内容分别是#!/bin/bash和echo "test",直接用heredoc写法即可:
cat > test_script.sh << 'EOF' #!/bin/bash echo "test" EOF
生成的文件默认就会给最后一行加换行符,用wc -l test_script.sh统计返回结果为2,完全符合要求。
方案2:给已有的2行内容补末尾换行
如果你的文件已经写了2行内容,但末尾缺换行符(此时wc -l会返回1,因为第二行不是完整行),用下面的sed命令补换行即可,不会新增额外行:
sed -i -e '$a\' your_file.txt
之前方法失效的原因
sed -i -z 's/$/\n/g' file.txt:-z参数会用NUL字符作为行分隔符,会给所有匹配的位置都加换行,重复添加就会产生多余空行- 你用的echo写法不完整,且直接用
echo >> 文件名的写法如果操作本身已经带末尾换行的文件,确实会多新增第三行
内容的提问来源于stack exchange,提问作者Ifeoluwa Willems
相关产品推荐
相关产品推荐

