使用grep -rnw命令查询system在src目录下的使用情况,并保存在了test.txt文件中,如何使用sed过滤掉test.txt中存在//system或 //空格system的注释行或//snfrintf(system(cmd))的注释行
时间: 2024-10-15 22:10:43 浏览: 28
Linux 使用grep筛选多个条件及grep常用过滤命令
5星 · 资源好评率100%
`grep -rnw src system test.txt` 这个命令会搜索 `src` 目录及其所有子目录下,查找包含 "system" 字符串的行,并将结果输出到 `test.txt` 文件中。`-r` 表示递归搜索,`-n` 显示行号,`-w` 要求匹配整个单词。
然而,为了过滤掉 `test.txt` 中包含特定注释行的情况,我们可以使用 `sed` 命令。首先,我们可以排除以 `//` 开始的单行注释,然后排除以 `//system` 或 `// 空格 system` 结束的行,以及 `//snfrintf(system(cmd))` 的行。这可以这样操作:
```bash
sed '/^\/\/.*$/d; /^\/\*[^*]*system[^*]*\*\//d; /^\/\*snfrintf\(system\[cmd\]\)\*\//d' test.txt > new_test.txt
```
这里解释一下 `sed` 命令:
1. `/^\/\/.*$/d`: 删除以 `//` 开始直到行尾的所有内容,即删除所有单行注释。
2. `/^\*\/system\*$/d;`: 删除以 `/*system` 开始并以 `*/` 结束的行,即排除多行注释中含有 "system" 的部分。
3. `/^\*snfrintf\(system\[cmd\]\)\*\//d`: 类似上一条,排除包含 `snfrintf(system(cmd))` 的多行注释。
最后的结果将存储在一个新的文件 `new_test.txt` 中。如果你想直接替换原文件,可以去掉 `> new_test.txt` 部分,使得结果覆盖到 `test.txt`。
阅读全文