首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在进程已经启动之后,Grep过滤输出吗?

在进程已经启动之后,Grep过滤输出吗?
EN

Stack Overflow用户
提问于 2012-07-12 04:28:48
回答 4查看 2.2K关注 0票数 3

通常,当用户想要查看运行某项操作的特定输出行时,可以这样做:

代码语言:javascript
复制
./a.out | grep IHaveThisString

但是,如果IHaveThisString是每次都会改变的东西,所以您需要首先运行它,观察输出以获取IHaveThisString在该特定运行中的内容,然后对其进行grep,该怎么办呢?我可以只转储到文件,然后grep,但有没有可能做一些事情,如背景,然后把它带到前台,把它带回来,但现在管道到一些grep?类似于:

代码语言:javascript
复制
./a.out
Ctrl-Z
fg | grep NowIKnowThisString

只是好奇..。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-12 05:12:12

简写:您可以这样做,但您需要知道您需要提前完成;这不是可以在事后交互地放在适当位置的东西。

编写脚本以确定字符串是什么。我们需要一个更详细的输出格式示例,以提供更好的用法示例,但这里有一个用于简单情况的示例,其中整个第一行都是过滤目标:

代码语言:javascript
复制
run_my_command | { read string_to_filter_for; fgrep -e "$string_to_filter_for" }

根据需要使用尽可能多的命令替换read string_to_filter_for,以读取足够的输入来确定目标字符串;如果需要,这可能是一个循环。

例如,假设输出包含以下内容:

代码语言:javascript
复制
Session id: foobar

然后,您希望对包含foobar的行执行grep。

...then您可以通过管道通过以下脚本:

代码语言:javascript
复制
re='Session id: (.*)'
while read; do
  if [[ $REPLY =~ $re ]] ; then
    target=${BASH_REMATCH[1]}
    break
  else
    # if you want to print the preamble; leave this out otherwise
    printf '%s\n' "$REPLY" 
  fi
done
[[ $target ]] && grep -F -e "$target"

如果您想手动指定过滤器目标,可以通过让循环检查正在使用过滤器内容创建的文件,并在以后启动grep时使用它来实现。

票数 1
EN

Stack Overflow用户

发布于 2012-07-12 05:01:18

不,只有当你没有用其他方式保存它时,它才会在你的屏幕缓冲区中。

票数 2
EN

Stack Overflow用户

发布于 2012-07-12 05:08:46

这有点奇怪,你需要什么,但你可以这样做:

  • 您必须首先进入script会话;
  • 然后使用外壳;
  • 然后启动并中断程序;
  • 然后在<代码>D10文件上运行grep

示例:

代码语言:javascript
复制
$ script
$ ./a.out
Ctrl-Z
$ fg 
$ grep NowIKnowThisString typescript
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11440951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档