用于搜索文本文件的一部分并打印它的通用命令(使用 awk 或 sed)

Posted

技术标签:

【中文标题】用于搜索文本文件的一部分并打印它的通用命令(使用 awk 或 sed)【英文标题】:Generic command to search for a part of a text file and print it (using awk or sed) 【发布时间】:2013-02-11 17:03:43 【问题描述】:

我应该使用哪个命令来打印部分文本文件,知道这部分的开始和结束位置?

例如:

columnA columnB columnC
baba     bobo    bibi
caca     coco    cici  
.         .      .
.         .      .
zaza    zeze     zizi
EndA    EndB    EndC

在我的所有文件中,columnA(columnB ...) 和 EndA(EndB ...) 的文本完全相同,我想做的是打印它们之间的内容,即 baba(bobo . ..) 每个文件都不同。

我这样做是使用 grep |切 |尾,但是每次我有一个新文件时我都必须编写(并找到)新模式,因为每个模式的行数都不同。我想使用 awk 或 sed 有一种更智能(和通用)的方法来做到这一点。

【问题讨论】:

IIUC, this 可能是您问题的答案。 【参考方案1】:

如果您要打印除第一行和最后一行之外的所有内容,您可以这样做

sed '1d; $d' file.txt

【讨论】:

【参考方案2】:

在 sed 解决方案旁边,awk 也可以使用:

BEGIN 
  output=0;


$1 ~ /columnA/ || $1 ~ /endA/ 
  output=!output;
  next;


 if(start_output) print $0 

【讨论】:

【参考方案3】:

sed 有范围:

 sed -ne '/^columnA/,/^EndA/p'

【讨论】:

【参考方案4】:

你可以使用头部和尾部

head -n-1 temp.txt | tail -n +2

输出

baba     bobo    bibi
caca     coco    cici
.         .      .
.         .      .
zaza    zeze     zizi

【讨论】:

以上是关于用于搜索文本文件的一部分并打印它的通用命令(使用 awk 或 sed)的主要内容,如果未能解决你的问题,请参考以下文章

Linux下的五个查找命令:grepfindlocatewhereiswhich

linux学习笔记24---命令grep

linux下常用的五个查找命令

Linux下的五个查找命令:grepfindlocatewhereiswhich

linux每天一小步---grep命令详解

第十六章 在文件中搜索文本工具:grep命令 和egrep命令