我想从文件中删除一个或多个特定的行号。如何使用sed做到这一点?
当前回答
最短的,删除sed中的第一行
Sed -i '1d'文件
正如Brian在这里所说,<address><command>被使用,<address>< 1>和<command> <d>。
其他回答
猫- b / etc / passwd | sed - e ' s / ^ () + (< line_number >) (\ t)(. *) /——删除/ g; s / ^ () + ([0 - 9] +) (\ t) / / g’
Cat -b ->打印数字行
S /^()+(<line_number>)(\t)(.*)//g -> replace line number to null (remove line)
s / ^ () + ([0 - 9] +) (\ t) /猫/ g #删除数字印刷
如果你想删除第5到第10行和第12行:
sed -e '5,10d;12d' file
这将把结果打印到屏幕上。如果你想把结果保存到同一个文件:
sed -i.bak -e '5,10d;12d' file
这将把未修改的文件存储为file.bak,并删除给定的行。
注意:行号从1开始。文件的第一行是1,而不是0。
我想提出一个关于awk的概括。
当文件由固定大小的块组成时 要删除的行对于每个块都是重复的, Awk可以很好地以这种方式工作
awk '{nl=((NR-1)%2000)+1; if ( (nl<714) || ((nl>1025)&&(nl<1029)) ) print $0}'
OriginFile.dat > MyOutputCuttedFile.dat
在这个例子中,块的大小是2000,我想打印行[1..713]和[1026. 1029]。
NR是awk用来存储当前行号的变量。 %给出两个整数除法的余数(或模量); 在这里,我们在变量nl中写入当前块中的行号。(见下文) ||和&&是逻辑运算符OR和and。 打印$0写入整行
Why ((NR-1)%BLOCKSIZE)+1:
(NR-1) We need a shift of one because 1%3=1, 2%3=2, but 3%3=0.
+1 We add again 1 because we want to restore the desired order.
+-----+------+----------+------------+
| NR | NR%3 | (NR-1)%3 | (NR-1)%3+1 |
+-----+------+----------+------------+
| 1 | 1 | 0 | 1 |
| 2 | 2 | 1 | 2 |
| 3 | 0 | 2 | 3 |
| 4 | 1 | 0 | 1 |
+-----+------+----------+------------+
您可以删除特定的单行及其行号
sed -i '33d' file
这将删除33行号上的行并保存更新后的文件。
还有awk
awk 'NR!~/^(5|10|25)$/' file
推荐文章
- 如何生成一个核心转储在Linux上的分段错误?
- 在Python中如何在Linux和Windows中使用“/”(目录分隔符)?
- 使用sh shell比较字符串
- 只列出UNIX中的目录
- 如何限制从grep返回的结果的数量?
- 如何管道列表的文件返回的找到命令到猫查看所有文件
- 以相对于当前目录的路径递归地在Linux CLI中列出文件
- 如何使用xargs复制名称中有空格和引号的文件?
- 在makefile中抑制命令调用的回声?
- RE错误:在Mac OS X上的非法字节序列
- Shell脚本for循环语法
- read()和recv(), send()和write()之间有什么区别?
- 如何将多行输出连接到一行?
- 在Unix中删除回车
- 如何在vi文本编辑器中获得文件的sudo访问权限?