我想从文件中删除一个或多个特定的行号。如何使用sed做到这一点?
当前回答
这通常是反模式的症状。生成行号的工具很可能被立即删除行的工具所取代。例如;
grep -nh error logfile | cut -d: -f1 | deletelines logfile
(其中deletelines是您想象中需要的实用程序)与
grep -v error logfile
话虽如此,如果您确实需要执行这个任务,那么可以从行号文件生成一个简单的sed脚本。有趣的是(但可能有点令人困惑),您可以使用sed来做到这一点。
sed 's%$%d%' linenumbers
它接受一个包含行号的文件,每行一个,并在标准输出中产生相同的行号,每个行号后面加d。这是一个有效的sed脚本,我们可以将它保存到一个文件中,或者(在某些平台上)管道到另一个sed实例:
sed 's%$%d%' linenumbers | sed -f - logfile
在某些平台上,sed -f不理解选项参数-来表示标准输入,所以你必须将脚本重定向到一个临时文件,并在完成时清理它,或者如果你的OS(或shell)有/dev/stdin或/proc/$pid/fd/1来替换唯一的短线。
与往常一样,您可以在-f选项之前添加-i,让sed就地编辑目标文件,而不是在标准输出中生成结果。在*BSDish平台(包括OSX)你需要提供一个显式参数-i以及;一个常见的习语是提供一个空的参数;我”。
其他回答
猫- 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 #删除数字印刷
这通常是反模式的症状。生成行号的工具很可能被立即删除行的工具所取代。例如;
grep -nh error logfile | cut -d: -f1 | deletelines logfile
(其中deletelines是您想象中需要的实用程序)与
grep -v error logfile
话虽如此,如果您确实需要执行这个任务,那么可以从行号文件生成一个简单的sed脚本。有趣的是(但可能有点令人困惑),您可以使用sed来做到这一点。
sed 's%$%d%' linenumbers
它接受一个包含行号的文件,每行一个,并在标准输出中产生相同的行号,每个行号后面加d。这是一个有效的sed脚本,我们可以将它保存到一个文件中,或者(在某些平台上)管道到另一个sed实例:
sed 's%$%d%' linenumbers | sed -f - logfile
在某些平台上,sed -f不理解选项参数-来表示标准输入,所以你必须将脚本重定向到一个临时文件,并在完成时清理它,或者如果你的OS(或shell)有/dev/stdin或/proc/$pid/fd/1来替换唯一的短线。
与往常一样,您可以在-f选项之前添加-i,让sed就地编辑目标文件,而不是在标准输出中生成结果。在*BSDish平台(包括OSX)你需要提供一个显式参数-i以及;一个常见的习语是提供一个空的参数;我”。
如果你想删除第5到第10行和第12行:
sed -e '5,10d;12d' file
这将把结果打印到屏幕上。如果你想把结果保存到同一个文件:
sed -i.bak -e '5,10d;12d' file
这将把未修改的文件存储为file.bak,并删除给定的行。
注意:行号从1开始。文件的第一行是1,而不是0。
最短的,删除sed中的第一行
Sed -i '1d'文件
正如Brian在这里所说,<address><command>被使用,<address>< 1>和<command> <d>。
您可以删除特定的单行及其行号
sed -i '33d' file
这将删除33行号上的行并保存更新后的文件。
推荐文章
- 如何从命令行将每两行合并为一行?
- 如何从命令行通过mysql运行一个查询?
- 在创建守护进程时执行双fork的原因是什么?
- 用sed或awk在特定的行号插入一行
- 如何从另一个文件A中删除文件B中出现的行?
- 对以制表符分隔的文件进行排序
- 如何使用查找命令从列表中查找所有具有扩展名的文件?
- 如何将文件指针(file * fp)转换为文件描述符(int fd)?
- 在Bash中获取日期(比当前时间早一天)
- Linux: kill后台任务
- 在OSX中永久设置PATH环境变量
- 如何在C程序中获取当前目录?
- 如何在Bash中逐行合并两个文件
- 如何从远程SSH会话发送数据到本地剪贴板
- 我如何得到bash完成工作与别名?