Linux如何批量提取多个文件中的某一行。

每个文件都含有TXT,而且含TXT的这一行是TXT:1,TXT:2, TXT:3……
如何批量把含TXT的这一行提取出来?而后将1,2,3等等这些数据从上到下列出来?
就是file0有txt:1, file2有txt:2, file4有txt:3……一直到file400有txt:200,
如何将每个文件含有txt的一行提取出来,然后前面对应上文件名,然后再保存到一个文件里面?
形成输出文件是
file0 txt:1
file2 txt:2
file4 txt:3
……
file400 txt:200

实例文件:

[root@s08 testdir]# cat file1
abc1
txt
[root@s08 testdir]# cat file2
abc2
txt
[root@s08 testdir]# cat file3
abc3
cdf
txt
[root@s08 testdir]#


过滤所需内容: -H 打印文件名  -n 打印行号

[root@s08 testdir]# grep -Hn 'txt' file* > result.txt


查看结果:

[root@s08 testdir]# cat result.txt
file1:2:txt
file2:2:txt
file3:3:txt
[root@s08 testdir]#


看一下,是否你所需的结果。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-19
你举个简明直观的例子嘛。
用grep配合 awk可以很好处理的

#!/bin/bash
#*表示要查找的文件
for filename in *
do
grep TXT $filename|gawk '{if($0!="") print "'$filename'",$0}' >>结果
done
第2个回答  2013-05-19
grep TXT filename | xargs sed -n "p"追问

有上百个文件。。。如何提取后保存到一个文件里面呢?

追答

重定向:
grep TXT filename | xargs sed -n "p" >file

追问

不对哇。。显示无效的sed命令。。。
而且我想将提取后的文件每一行前面加上对应的文件名。。
就是file0有txt:1, file2有txt:2, file4有txt:3……一直到file400有txt:200,
如何将每个文件含有txt的一行提取出来,然后前面对应上文件名,然后再保存到一个文件里面?
形成输出文件是
file0 txt:1
file2 txt:2
file4 txt:3
……
file400 txt:200

追答

误解了你的题意,看看下面的代码是否满足你:

#!/bin/sh
for file in `ls /path`  #path 是你文件存放的路径
do
    echo "$file `grep TXT $file`" >>result.txt
done

Linux如何批量提取多个文件中的某一行。
实例文件:[root@s08 testdir]# cat file1abc1txt[root@s08 testdir]# cat file2abc2txt[root@s08 testdir]# cat file3abc3cdftxt[root@s08 testdir]过滤所需内容: -H 打印文件名 -n 打印行号 [root@s08 testdir]# grep -Hn 'txt' file* > result.txt 查看结果:[root@s08 testdi...

急求编一个batch用于批量提取文本中指定行及指定列的内容,并输出到新的...
2、查找到的数据保存在f:\\data.txt文档中,如果你想保存在其他文档或位置,直接改脚本就行,如果想通过对话框来做,可以改脚本 3、查询坐标保存在f:\\pos.txt文件中,你把坐标写到pos.txt中就行了,坐标形式是例如 第一行 第13到19的字符 应该写成 1,13,19 每个坐标写在一行上 多个坐标就写成 ...

powershell如何提取文本中的第一列数据,类似awk的功能实现
awk以制表符为分隔符,输出第一列:awk -F '\\t' '{print $1}' your_filepython读入文件,将每行用strip()去除字符串结尾的"\\t",再用split("\\t")以制表符为分隔符将该行的每一列内容放入到列表ls中,再操作列表ls就可以了:for l in file("your_file"): ls = l.strip().split("\\t") print ls[...

linux下如何批量在不同文件中指定行的指定位置插入内容?
可以用perl !\/usr\/bin\/perl my $dir = '\/home\/tmp';opendir (DIR,$dir);my @file = grep { \/^\\w+\/i} readdir(DIR);close DIR;my $i = 0 ;my $ii = $#file;while($i <= $ii){ open FILE, "$dir\/$file[$i]";cat = <FILE>;close FILE;open OUT,">$dir\/$file[$i...

Linux批量删除文件linux批量文件删除
linux如何批量提取文件最后几行?可以使用awk命令写一个循环,然后遍历所有文件,定位每个文件最后几行,重定向到新文件就可以了!linux定时批量复制文件命令?Linux下复制一个文件到不同的文件夹下。方式有很多,其中一个命令就是:echodirname*|xargs-n1cp-vfilename把当前目录下filename文件拷贝到以...

Linux批量提取文件名
简单的获取文件名的话,可以输入命令:ls,如果需要把整个磁盘所有文件名字打出的话,需要写个脚本,循环递归下。

linux shell 如何把 ls 列出来的文件名中不想要的部分排除?
ls | grep -v "unit"-v选项表示列出不包含匹配文本的所有行 本回答由提问者推荐 举报| 答案纠错 | 评论(1) 10 3 半季流年 采纳率:45% 擅长: C\/C++ 办公软件 电脑\/网络 操作系统\/系统故障 为您推荐: linux shell 文件改名 linux let linux 模式匹配 linux rename 批量 mv批量修改文件名 linux...

Linux如何批量获取文件并重新命名
1、首先,问题我觉得是 file1 file2 。。。file100 共100个文件夹,然后每个文件夹下面都有一个result的文件,欲将其分别命名为result1 result2... result100,并将这些命名后的result文件统一放到一个文件夹中 2、vi a.sh !\/bin\/sh i=1 dst_dir=\/opt\/dir for filename in `find $dst_di...

linux下2个文件夹里有很多同名不同内容的文件,如何批量合并这两个文件...
直接复制他们到第三个文件夹,同名的文件,是不是覆盖,那就看你选择了,技巧,可以复制第一个,然后移动第二个,然后放弃那些同名的,然后,交换1和2,再做一次,那么相同文件名的就筛选出来了,然后,比较,或计算他们的md5,一致的就是相同文件,不样的再做合并或覆盖等处理。

如何在文本文件中查找多个不同的字符串,并且将它自动标记,以便复制粘贴...
echo;&echo 正在处理...for \/f "delims=" %%y in ('dir\/b\/a-d *.xml')do (echo %%y (for \/f "tokens=2-8 delims=<>" %%a in ('type "%%y"^|findstr\/i "sdk:url.*\/sdk:url"')do (if "%%b"=="\/sdk:url" echo;%%a if "%%c"=="\/sdk:url" echo;%%b if "%%d"=...

相似回答