linux 中 批量删除指定的行
001、
(py38) root@DESKTOP-IDT9S0E:/home/test# cat a.txt ## 测试数据 01 02 03 04 05 06 07 (py38) root@DESKTOP-IDT9S0E:/home/test# cat index.txt ## 计划批量删除的行号 2 4 7 (py38) root@DESKTOP-IDT9S0E:/home/test# for i in $(cat index.txt); do sed -i "$i s/^/del_tab\t/" a.txt; done (py38) root@DESKTOP-IDT9S0E:/home/test# cat a.txt ## 添加删除标签 01 del_tab 02 03 del_tab 04 05 06 del_tab 07 (py38) root@DESKTOP-IDT9S0E:/home/test# sed -i '/del_tab\t/d' a.txt ## 删除 (py38) root@DESKTOP-IDT9S0E:/home/test# cat a.txt ## 删除结果 01 03 05 06
02、用循环实现
(py38) root@DESKTOP-IDT9S0E:/home/test# cat record.sh #!/bin/bash wc -l < a.txt | xargs seq | while read i do idx="" num=0 for j in $(cat index.txt) do if [ $i == $j ] then let num=num+1 fi done if [ $num -eq 0 ] then sed -n "$i"p a.txt >> result.txt fi done
(py38) root@DESKTOP-IDT9S0E:/home/test# ls a.txt index.txt record.sh (py38) root@DESKTOP-IDT9S0E:/home/test# cat a.txt ## 测试数据 1 2 3 4 5 6 7 (py38) root@DESKTOP-IDT9S0E:/home/test# cat index.txt ## 删除的行 2 4 7 (py38) root@DESKTOP-IDT9S0E:/home/test# bash record.sh (py38) root@DESKTOP-IDT9S0E:/home/test# ls a.txt index.txt record.sh result.txt (py38) root@DESKTOP-IDT9S0E:/home/test# cat result.txt 1 3 5 6