[转帖]终端下肉眼看不见的东西

终端,下肉,眼看,不见,东西 · 浏览次数 : 0

小编点评

```bash # 使用 for循环遍历文件并查找 "err" for i in `ls -1 *.log`; do # 使用 grep 查找 "err" 在文件中 grep 'err' $i # 如果找到 "err",则打印文件名称 if grep 'err' $i; then echo "$i" fi done ``` **解释:** 1. **`for` 循环遍历 `*.log` 文件** 2. **`grep` 查找字符串 "err" 在文件中** 3. **如果找到 "err",则打印文件名称** 4. **循环结束后,打印所有发现过的文件名称** **注意:** * `\\` 用于 escape 的字符。 * `.*log` 表示匹配所有以 `log` 开头的文件。 * `grep` 的 `$i` 表示匹配字符串的变量。

正文

假设test目录下面有a.log、b.log和c.log三个文件:

# ls -1 *.log
a.log
b.log
c.log

现在,我们想要遍历这几个文件,找到关心的信息,例如log文件中是否存在error信息。那么,我们会考虑写一个for循环来处理这个问题:

# for i in `ls -1 *.log | sed '$d'`; do
> grep 'err' $i
> done

非常简单的一个循环,但是执行后会发现以下错误:

grep: a.log: No such file or directory
grep: b.log: No such file or directory
grep: c.log: No such file or directory

非常奇怪,不是*.log这几个文件都在当前目录存在着的吗?为什么这里又找不到呢?
我当时试了各种各样的方法,都是报错,害我一度以为用双引号括起来的文件名会有特殊的效果。结果,灵光一现,就想到用cat命令来检查下,真是柳暗花明啊,当然你也可以想像得到这之间的过程也是多么让人抓狂的:

# cat -A < < EOF
> `ls -1 *.log`
> EOF
^[[00m^[[00ma.log^[[00m$
^[[00mb.log^[[00m$
^[[00mc.log^[[00m$
^[[m$

上面这些奇奇怪怪的东西是Bash的颜色控制码,相信折腾过bash prompt的同学应该对它非常了解,为什么会出现这些控制码呢?因为在我们的~/.bashrc中默认定义了几个alias,其中就有ls命令:

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ls='ls --color'
 

可以看到上面的最后一行就是问题的原因所在,找到原因后,就知道怎么解决了。不过这里我们还是不动.bashrc的配置,而是用另外一种方法:

# for i in `\ls -1 *.log`; do
> grep 'err' $i
> done

注意到了吗,用\ls就可以去掉alias的效果,这一点还是阮哥教我的,哈哈。

当然解决的方法很多,另外一种方法是直接使用通配符展开的功能:

for i in *.log; do grep 'err' $i; done

所以有时候眼睛看到的不一点是真的,这世上有很多我们无法用肉眼看到的,需要我们仔细的去揣摩体会。
解决问题的过程是纠结的,但是一旦解决了那种感觉非常开心,当然一直解决不了只能放弃也是非常无奈的事情。

与[转帖]终端下肉眼看不见的东西相似的内容:

[转帖]终端下肉眼看不见的东西

https://kodango.com/hidden-text-in-terminal 假设test目录下面有a.log、b.log和c.log三个文件: # ls -1 *.log a.log b.log c.log 现在,我们想要遍历这几个文件,找到关心的信息,例如log文件中是否存在error

[转帖] Linux运维必备的13款实用工具

1、查看进程占用带宽情况-Nethogs Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。 下载:http://sourceforge.net/projects/nethogs/files/nethogs/0.8/nethogs-0.8.0.tar.gz/downlo

[转帖]命令行窗口下重复执行shell命令

1、命令操作录制和回放 #script -t 2> timing.log -a output.session # 开始录制 #scriptreplay timing.log output.session #回放 2、操作终端共享 通过管道来传输信息实现。需要一个pipe文件,并在需要展示的终端打开这

[转帖]Linux下进程管理知识(详细)总结

一、简介 本文主要详细介绍进程相关的命令的使用、进程管理及调度策略的知识。 二、常用的命令解析 1、ps命令 命令选项解析-a显示一个终端所有的进程-u显示进程的归属用户和内存占用情况-x显示没有控制终端的进程-l长格式显示更详细的信息-e显示所有进程-w宽行显示,可以使用多个w进行加宽显示 进程常

[转帖]前后台切换命令(ctrl+z jobs bg fg &)

当我在终端里面运行某个命令的时候,结果不是很快就能出来的那种,或者是一大堆字在屏幕上狂翻。这个时候,有时ctrl+c也不起作用,那我会用ctrl+z退出来,这个很有效,但是说实话我不知道为什么这个可以退出,以及有什么后果,今天看到一篇博客,内容如下: linux下fg、bg、ctrl + z、job

[转帖]ncurses 入门指南

https://www.imooc.com/article/80504 怎样使用 curses 来绘制终端屏幕? 虽然图形界面非常酷,但是不是所有的程序都需要点击式的界面。例如,令人尊敬的 Vi 编辑器在第一个 GUI 出现之前在纯文本终端运行了很久。 Vi 编辑器是一个在“文本”模式下绘制的面向屏

[转帖]vs调试运行程序出现:“由于找不到MSVCP140D.dll,无法继续执行代码 ”的解决方法

碎碎念 最近在使用Visual studio调试程序的时候,突然冒出了“由于找不到MSVCP140D.dll,无法继续执行代码。重新安装程序可能会解决次问题。”的错误。如下图所示。在网上尝试了很多别人的解决方案,都没有效果。 最后在不懈努力下终于可以正常运行了。 以下我尝试过的无效方案: 很多人说是

[转帖]密集计算场景下的 JNI 实战

https://www.jianshu.com/p/ab8fd26014c1 作者:vivo 互联网服务器团队- Wei Qianzi、Li Haoxuan 在 Java 发展历程中,JNI 一直都是一个不可或缺的角色,但是在实际的项目开发中,JNI 这项技术应用的很少。在笔者经过艰难的踩坑之后,终

[转帖]Comcast: 模拟糟糕的网络连接,以便构建更好的系统。

https://www.5axxw.com/wiki/content/r0cq99 Comcast 在诸如网络分区和实例终止这样的硬故障下测试分布式系统是至关重要的,但我们在灾难性较小的条件下测试它们也很重要,因为这是它们最常遇到的情况。Comcast是一个用来模拟常见网络问题的工具,如延迟、带宽限

[转帖]构建安全可靠的系统:从SRE到SRS

https://www.jianshu.com/p/ba61020aeb1e 在看到《Google系统架构解密:构建安全可靠的系统》这本书之前,个人就有安全和可靠性不分家的观念。看到有同样想法的书籍,甚是欢喜。读完上一本书,终于可以读这一本了,接下来很长一段时间,看下Google是如何构建安全可靠系