“找到| grep | awk“很糟糕。”


0

我正在扫描我服务器上的所有shell脚本,并通过以下命令执行此操作:

find / -type f -exec file --mime-type {} \; | grep "text/x-shellscript"

这工作正常,这是一个示例输出:

/lib/udev/hwclock-set: text/x-shellscript
/lib/init/bootclean.sh: text/x-shellscript
/etc/network/if-up.d/openssh-server: text/x-shellscript
/etc/network/if-up.d/mountnfs: text/x-shellscript

现在,我想处理文件名,并尝试使用awk:

find / -type f -exec file --mime-type {} \; | grep "text/x-shellscript" | awk -F: '{ print $1 }'

但是,这不会产生任何输出。我曾尝试重定向管道等,但在这里我已经碰壁了。

任何人都知道我做错了什么?


会发生什么事echo "/etc/network/if-up.d/mountnfs: text/x-shellscript" | awk -F: '{ print $1 }'
丹尼尔贝克

@DanielBeck那很有效。也许发现不写到stdout?但后来我无法解释grep如何发挥其作用...
狗吃猫世界

您可以将错误输出重定向到标准输出。您的命令将如下所示:find / -type f -exec file --meta-type {} \; | grep "text/x-shellscript" 2>&1 | awk -F: '{ print $1 }'
Daniel Beck

@DanielBeck不,它没有帮助。我试过“find / -type f -exec file --mime-type {} \; | grep”text / x-shellscript“2>&1 1> this_file_should_not_be_empty”,但似乎grep输出到了无处!即使文本显示在监视器上而没有管道重定向。

您可以缩小问题轨迹,并通过消除那里的无用使用来grep摆脱问题上的其中一个标记。
JdeBP 2011年

Answers:


2

尝试这个:

  find / -type f -exec file --meta-type {} \; | grep "text/x-shellscript" | cut -d: -f 1

谢谢,这很有效。但是我仍然很好奇为什么awk没有

你的awk命令在这里运行正常,它没有任何问题。如果你将这个管道嵌入到其他命令(反引号等)中,那么我能想到的唯一区别就是你在awk命令中使用的单引号。
haimg 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.