Linux下如何仅移除文件第3行及后续行的空格(保留前两行空格)
Linux下如何仅移除文件第3行及后续行的空格(保留前两行空格)
刚从IBM z/OS转Ubuntu,只学了两周基础命令,连sed的man页信息都不全,遇到这种需求确实够头疼的!我给你两个高效的单命令解决方案,比你之前用head+tail+sed拼起来的方法要省心多了,而且是流式处理,不用拆分文件,效率也更高。
方法一:用sed命令直接处理
sed是处理文本的利器,这个需求用sed一行就能搞定:
sed '3,$s/ //g' 你的输入文件名.txt > 输出文件名.txt
给你拆解开讲明白每个部分:
3,$:这是sed的地址范围,表示从第3行一直到最后一行($代表最后一行)s/ //g:这是sed的替换命令,s/要替换的内容/替换成的内容/g,这里把空格替换成空(也就是删掉空格),末尾的g是全局替换,要是不加的话,每行只会删掉第一个空格,加了之后才会把一行里所有空格都删掉- 整个命令直接流式处理整个文件,不用像之前那样拆分文件,一步到位。
方法二:用awk命令(更直观易读)
如果你觉得sed的地址范围记起来有点绕,用awk可能更符合直觉,因为awk天生就按行处理,还能直接判断行号:
awk 'NR<=2{print; next} {gsub(/ /,""); print}' 你的输入文件名.txt > 输出文件名.txt
解释下关键部分:
NR是awk的内置变量,自动记录当前处理的行号NR<=2{print; next}:如果是前两行,直接原封不动打印,然后next跳过后面的处理逻辑,直接去处理下一行{gsub(/ /,""); print}:剩下的行(也就是第3行及以后),用gsub把所有空格替换成空,然后打印处理后的行
测试验证
拿你给的输入文件举例:
This is the first line
This is the second line
This is the third line
This is the fourth line
运行上面任意一个命令后,输出就是你要的效果:
This is the first line
This is the second line
Thisisthethirdline
Thisisthefourthline
完全符合你的预期,而且处理大文件的时候,这两个方法的效率比拆分文件的组合命令高多了,不会有额外的文件IO开销。
备注:内容来源于stack exchange,提问作者Krish Yt
相关产品推荐
相关产品推荐

