Linux 将grep搜索从多个文件粘贴到新文件

Linux 将grep搜索从多个文件粘贴到新文件,linux,grep,Linux,Grep,我有多个这样的文件 filename.log.50 filename.log.49 filename.log.48 ... ... filename.log.2 filename.log.1 它们都有自己的内容 ....connection established ....sending data "Text" ....return ok ....connection closed 我怎样才能将文件中以30到50结尾的所有“发送数据”文本行放入新文件中? 我是这样一行一行地做的: cat f

我有多个这样的文件

filename.log.50
filename.log.49
filename.log.48
...
...
filename.log.2
filename.log.1
它们都有自己的内容

....connection established
....sending data "Text"
....return ok
....connection closed
我怎样才能将文件中以30到50结尾的所有“发送数据”文本行放入新文件中? 我是这样一行一行地做的:

cat filename.log.50 |grep 'sending data' >> new_file.log
cat filename.log.49 |grep 'sending data' >> new_file.log
cat filename.log.48 |grep 'sending data' >> new_file.log
....
....
我在想这样的事情

cat filename.log.5* |grep 'sending data' >> new_file.log
cat filename.log.4* |grep 'sending data' >> new_file.log
cat filename.log.3* |grep 'sending data' >> new_file.log

但这将包括filename.log.5、filename.log.4、filename.log.3

例如,您可以使用:

grep 'sending data' file.log{[34][0-9],50} >> new_file.log
从30到50都可以匹配

如果这不适用于您,则将其拆分为两个块:

grep 'sending data' file.log[34][0-9] >> new_file.log
grep 'sending data' file.log50 >> new_file.log

[34][0-9]
匹配从
30
49

您可以使用以下示例:

grep 'sending data' file.log{[34][0-9],50} >> new_file.log
从30到50都可以匹配

如果这不适用于您,则将其拆分为两个块:

grep 'sending data' file.log[34][0-9] >> new_file.log
grep 'sending data' file.log50 >> new_file.log

[34][0-9]
匹配从
30
49

您可以使用以下示例:

grep 'sending data' file.log{[34][0-9],50} >> new_file.log
从30到50都可以匹配

如果这不适用于您,则将其拆分为两个块:

grep 'sending data' file.log[34][0-9] >> new_file.log
grep 'sending data' file.log50 >> new_file.log

[34][0-9]
匹配从
30
49

您可以使用以下示例:

grep 'sending data' file.log{[34][0-9],50} >> new_file.log
从30到50都可以匹配

如果这不适用于您,则将其拆分为两个块:

grep 'sending data' file.log[34][0-9] >> new_file.log
grep 'sending data' file.log50 >> new_file.log

[34][0-9]
匹配从
30
49

我将使用循环:

for i in {30..50}; do
  grep 'sending data' "filename.log.$i"
done > new_file.log

我会使用循环来代替:

for i in {30..50}; do
  grep 'sending data' "filename.log.$i"
done > new_file.log

我会使用循环来代替:

for i in {30..50}; do
  grep 'sending data' "filename.log.$i"
done > new_file.log

我会使用循环来代替:

for i in {30..50}; do
  grep 'sending data' "filename.log.$i"
done > new_file.log
以下是简单的方法:

seq -f "filename.log.%.f" 50 30 | xargs grep "sending data" > new_file.log
以下是简单的方法:

seq -f "filename.log.%.f" 50 30 | xargs grep "sending data" > new_file.log
以下是简单的方法:

seq -f "filename.log.%.f" 50 30 | xargs grep "sending data" > new_file.log
以下是简单的方法:

seq -f "filename.log.%.f" 50 30 | xargs grep "sending data" > new_file.log


您可以将一位数字重命名为两位数字(05而不是5)。当我回家时,如果没有答案,我会发布一个答案。你可以将一位数字重命名为两位数字(05而不是5)。当我回家时,如果没有答案,我会发布一个答案。你可以将一位数字重命名为两位数字(05而不是5)。当我回家时,如果没有答案,我会发布一个答案。你可以将一位数字重命名为两位数字(05而不是5)。当我回家的时候,如果没有,我会发布一个答案。我试过了,但它会返回:file.log[34][0-9]:没有这样的文件或目录错误,因为事实上你的文件是
filename50
,等等,所以应该是
filename.log[34][0-9]
你说得对,我在数字之前漏掉了最后一个点!非常感谢你!在新文件中,所有行的开头都有文件名,我需要在命令中添加一个标志选项来避免吗?@tachomi,是的,您可以使用
grep-h
。从
man grep
,“-h,--no filename,在输出时禁止文件名的前缀”。我尝试过,但它返回的是:file.log[34][0-9]:没有这样的文件或目录错误,因为实际上您的文件是
filename50
,等等,所以它应该是
filename.log[34][0-9]
您是对的,我错过了数字前的最后一个点!非常感谢你!在新文件中,所有行的开头都有文件名,我需要在命令中添加一个标志选项来避免吗?@tachomi,是的,您可以使用
grep-h
。从
man grep
,“-h,--no filename,在输出时禁止文件名的前缀”。我尝试过,但它返回的是:file.log[34][0-9]:没有这样的文件或目录错误,因为实际上您的文件是
filename50
,等等,所以它应该是
filename.log[34][0-9]
您是对的,我错过了数字前的最后一个点!非常感谢你!在新文件中,所有行的开头都有文件名,我需要在命令中添加一个标志选项来避免吗?@tachomi,是的,您可以使用
grep-h
。从
man grep
,“-h,--no filename,在输出时禁止文件名的前缀”。我尝试过,但它返回的是:file.log[34][0-9]:没有这样的文件或目录错误,因为实际上您的文件是
filename50
,等等,所以它应该是
filename.log[34][0-9]
您是对的,我错过了数字前的最后一个点!非常感谢你!在新文件中,所有行的开头都有文件名,我需要在命令中添加一个标志选项来避免吗?@tachomi,是的,您可以使用
grep-h
。从
man grep
,“-h,--无文件名,禁止在输出时使用文件名前缀”。