我有一个将文本输出到stdout. 我想在我的终端中看到所有这些输出,同时我想过滤一些行并将它们保存在一个文件中。例子:
$ myscript
Line A
Line B
Line C
$ myscript | grep -P 'A|C' > out.file
$ cat out.file
Line A
Line C
Run Code Online (Sandbox Code Playgroud)
我想在终端中查看第一个命令的输出,并将第二个命令的输出保存在一个文件中。同时。我尝试使用tee,但没有结果,或者更好,结果相反。
为了澄清标题中的神秘问题,我将确切地告诉您我需要什么。我目前正在使用以下内容对所有数据库进行预定的 MySQL 备份:
mysqldump ... | gzip -c > mysql-backup.gz
Run Code Online (Sandbox Code Playgroud)
这没关系,但我愿意为每个单个数据库制作一个单独的文件,因为这样可以更轻松地查看转储数据或恢复单个数据库:
for db in $dbs; do mysqldump ... $db | gzip -c > mysql-backup-$db.gz; done
Run Code Online (Sandbox Code Playgroud)
我想将每个备份的所有转储存储在一个.tar文件中,即mysql-backup.tar.gz所有转储的数据库都在里面。我知道我可以简单地将.sql文件保持未压缩状态tar -cz *.sql,但是1) 我正在寻找一种不需要临时存储大文件的方法。实际上,在我当前的脚本中,mysqldump是通过管道传输到 的gzip,因此不会创建大文件。
2)是否有类似的方法可以.tar.gz从 stdin创建?
3)tar -c *.sql.gz等价于tar -cz *.sql?
我必须检查不断增长的日志实时,我发现,这让我的问题会错过一些线路使用(我不能什么不懂行)tail -f或者tailf,grep和cut。
我使用grep是因为我想过滤包含特定单词的行,然后cut -c -NUM因为有些行很长,我不希望它们在我的终端窗口中换行。
这是一个最小的示例,其中我正在观看由“第 N 行”行组成的示例日志,过滤单词“行”,在这种情况下缺少所有行(显然^C是我杀死了进程):
$ tail -n 3 -f log
13th line
14th line
15th line
^C
$ tail -n 3 -f log | grep --color=never 'line'
13th line
14th line
15th line
^C
$ echo $COLUMNS
100
$ tail -n 3 -f log | grep --color=never 'line' | cut -c -$COLUMNS
^C
Run Code Online (Sandbox Code Playgroud)
请注意,此问题仅tail …