从特定行GREP搜索单词

时间:2015-03-03 18:26:54

标签: search text grep

File type = "ooTextFile"
Object class = "TextGrid"

xmin = 0 
xmax = 82.7959410430839 
tiers? <exists> 
size = 1 
item []: 
    item [1]:
        class = "IntervalTier" 
        name = "ortho" 
        xmin = 0 
        xmax = 82.7959410430839 
        intervals: size = 6 
        intervals [1]:a
            xmin = 0 
            xmax = 15.393970521541949 
            text = "Aj tento rok organizuje Rádio  Sud piva. Kto chce súťažiť, nemusí sa nikde registrovať.  
        intervals [2]:
            xmin = 15.393970521541949 
            xmax = 27.58997052154195 
              .
              .  
              .

您好我正在处理数百个这样的文本文件 我想要从此文本文件中过滤所有值xmin=...,但只能从16th行过滤,因为在开始时有xmins,这些都是无用的,如您所见。

我试过了:

cat text.txt | grep xmin

但它显示xmin所在的所有行。

请帮帮我。我无法修改文本文件,因为我需要处理数百个文件,所以我必须设计合适的方法来过滤它们。

2 个答案:

答案 0 :(得分:1)

像这样:

awk 'FNR>15 && /xmin/' file*
            xmin = 0
            xmin = 15.393970521541949

它会显示行xmin

中的所有16

您还可以打印找到的xmin

的文件名
awk 'FNR>15 && /xmin/ {$1=$1;print FILENAME" -> "$0}' file*
file22 -> xmin = 0
file22 -> xmin = 15.393970521541949

更新:需要FNR才能使用多个文件。

答案 1 :(得分:0)

使用sedgrep查找&#34; xmin&#34;从第16行到单个文件的结尾:

sed -n '16,$p' foobar.txt | grep "xmin"

如果有多个文件,这里有一个bash脚本来获取输出:

#!/bin/bash
for file in "$1"/*; do
output=$(sed -n '16,$p' "$file" | grep "xmin")
if [[ -n $output ]]; then
echo -e "$file has follwoing entries:\n$output"; fi; done

将脚本作为bash script.sh /directory/containing/the/files/to/be/searched

运行