grep过滤

本文介绍了如何使用grep命令过滤掉.svn目录。通过管道和grep的-v选项,或者使用--exclude-dir选项来排除匹配,简化了命令行操作。此外,还展示了如何在.bashrc文件中设置GREP_OPTIONS,以便在所有grep命令中默认排除.svn目录。
 1.使用管道进行双层“过滤”,其中第二次grep使用了-v选项,即逆向匹配,打印出不匹配的行
    grep -r 'function_name' * | grep -v '.svn'

    2.或者更简单一些,直接使用--exclude-dir选项,即指定排除目录,注意svn前的 \.
    grep -r --exclude-dir=\.svn 'function_name' * 

    的确,通过简单的选项设置,我们达到了过滤.svn目录的功能,但是每次都要输入 --exclude-dir=\.svn 的选项,似乎太麻烦了一点,幸运的是linux下灵活的配置文件可以解决这一切:
    
    打开 ~/.bashrc (这是bash的当前用户配置文件),在文件的最上方添加这样一条:
    export GREP_OPTIONS="--exclude-dir=\.svn" 
    (注意 = 的前后不能有空格,不然在载入该配置文件时会提示错误)

    保存并关闭,同时在命令行键入如下命令:
    source ~/.bashrc  (让bash重新读取脚本)
    当然,你也可以简单地关闭shell并重新打开一个shell窗口

### 使用 `grep` 命令过滤空行 要使用 `grep` 命令过滤掉文件中的空行,可以采用正则表达式来排除仅包含空白字符的行。以下是实现方法: #### 1. **基本语法** 通过 `-v` 参数反转匹配结果,并结合正则表达式 `^$` 来排除完全为空的行[^2]。 ```bash grep -v '^$' filename ``` 这条命令的作用是: - `^`: 表示一行的开头。 - `$`: 表示一行的结尾。 - 当 `^$` 结合在一起时,表示整行没有任何字符(即空行)。 - `-v` 参数使得 `grep` 输那些不匹配该模式的行。 --- #### 2. **扩展:同时过滤注释行和空行** 如果还需要额外过滤以特定符号(如 `#`, `;`)开头的注释行,可以使用更复杂的正则表达式[^2]。 ```bash grep -Ev '^$|^\s*#|^\s*;' filename ``` 解释如下: - `-E`: 启用扩展正则表达式支持。 - `-v`: 反转匹配。 - `^$`: 匹配空行。 - `^\s*#`: 匹配以任意数量空白符后跟 `#` 开始的行。 - `^\s*;`: 类似于前一项,但针对的是分号 `;` 注释。 --- #### 3. **实例演示** 假设有一个名为 `example.txt` 的文件,内容如下: ```plaintext # This is a comment line This is an active line. ; Another active line. Yet another one with spaces . Empty line above this one. ``` 运行以下命令: ```bash grep -Ev '^$|^\s*#|^\s*;' example.txt ``` 输将是: ```plaintext This is an active line. Another active line. Yet another one with spaces . ``` 可以看到,所有的空行、注释行都被成功移除。 --- #### 4. **注意事项** - 如果文件中存在仅有空白字符(如多个空格或制表符)而无可见字符的伪空行,也需要一并处理。此时可修改正则表达式为 `^\s*$`,其中 `\s*` 表示零个或多个空白字符。 最终命令变为: ```bash grep -Ev '^\s*$|^\s*#|^\s*;' filename ``` --- ### 示例代码 以下是一段脚本,用于自动化清理指定目录下所有 `.txt` 文件中的空行和注释行: ```bash #!/bin/bash for file in *.txt; do grep -Ev '^\s*$|^\s*#|^\s*;' "$file" > "${file%.txt}_cleaned.txt" done ``` 这段脚本会遍历当前目录下的所有 `.txt` 文件,将经过清洗的内容保存到新的 `_cleaned.txt` 文件中。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值