如何用单条命令将文件中被删除的行输出到新文件?
解决sed删除行同时保存被删内容的问题
嘿,这个问题我之前也碰到过!你用的sed -i 1,10d A.txt >> B.txt之所以没效果,核心原因是-i参数让sed进入原地修改模式——它会直接修改原文件,不会把处理的内容输出到标准输出,所以你后面的>> B.txt重定向的是空内容,自然看不到被删除的行。
下面给你两种靠谱的解决方案:
方法一:分两步操作(直观易懂)
先把要删除的行提取到B.txt,再删除原文件的对应行,逻辑清晰,适合新手:
# 提取A.txt的前10行到B.txt head -n 10 A.txt > B.txt # 原地删除A.txt的前10行 sed -i 1,10d A.txt
方法二:用sed的w命令一次完成(高效简洁)
sed自带的w命令可以把匹配到的行写入指定文件,结合多编辑命令-e,能一次完成“保存被删行+删除原文件行”的操作:
sed -i -e '1,10w B.txt' -e '1,10d' A.txt
-e '1,10w B.txt':匹配A.txt的前10行,将它们写入B.txt-e '1,10d':删除A.txt的前10行-i:原地修改A.txt
这样一条命令就能搞定两个需求,效率更高~
内容的提问来源于stack exchange,提问作者imabeast
相关产品推荐
相关产品推荐

