这些是文本文件:
f1.txt
:
TXT123456798
TRB0987906554
TXTxzcxczxzcxzc
f2.txt
:
TXT999999999
TAB888888888
TXT777777777
Grep TXT 从多个文件中,并逐个写入每个带有文件名的剪切子字符串。
我已经尝试了以下代码:
#!/bin/sh
reports_count=`find /home/pverm84/folder1 -cmin -360 | grep txt | wc -l`
reports=($(find /home/pverm84/folder1 -cmin -360 | grep txt))
seq=0
while [ $seq -lt $reports_count ]
do
echo
CAP_reportName=${reports[$seq]}
echo File Name is $CAP_reportName
tbt= grep TXT $CAP_reportName | cut -c 4-6
File1=$(basename $CAP_reportName)
count=$tbt$File1
echo $count
seq=`expr $seq + 1`
done
电流输出:
File name is /home/pverm84/folder1/f2.txt
999
777
f2.txt
File name is /home/pverm84/folder1/f1.txt
123
xzc
f1.txt
例外输出:
newfile.txt
f1.txt 123
f1.txt xzc
f2.txt 999
f2.txt 777
带有-H
标志的grep
会输出您想要的信息,只是格式不正确:
$ grep -H TXT /home/pverm84/folder1/*
/home/pverm84/folder1/file1.txt:TXT123456798
/home/pverm84/folder1/file1.txt:TXTxzcxczxzcxzc
/home/pverm84/folder1/file2.txt:TXT999999999
/home/pverm84/folder1/file2.txt:TXT777777777
我们可以使用sed
来重新格式化这些行:
$ grep -H TXT /home/pverm84/folder1/* | sed -E 's/:TXT(.{3}).*/ 1/'
/home/pverm84/folder1/file1.txt 123
/home/pverm84/folder1/file1.txt xzc
/home/pverm84/folder1/file2.txt 999
/home/pverm84/folder1/file2.txt 777
该sed
命令匹配grep
输出中的:TXTXXX...
,并将其替换为XXX
。
您可以从目标目录运行命令以避免绝对路径:
$ cd /home/pverm84/folder1/; grep -H TXT * | sed -E 's/:TXT(.{3}).*/ 1/'
file1.txt 123
file1.txt xzc
file2.txt 999
file2.txt 777
你可以在这里尝试。