【C regex】Regex for Mp4文件筛选

正则表达式历史:来自高人指点

int main(int argc, char **argv)
{       
    int status;
    int i;
    int cflags = REG_EXTENDED;
    regmatch_t pmatch[1];
    const size_t nmatch = 1;
    regex_t reg;
    const char *pattern = "([0-9.mp4]{7})";
    char *buf = argv[1];

    regcomp(&reg, pattern, cflags);
    status = regexec(&reg, buf, nmatch, pmatch, 0);

    if (status == REG_NOMATCH){
        printf("No F**K!\n");
    } else if(status == 0){
        printf("F**K: \n");
        for(i = pmatch[0].rm_so; i < pmatch[0].rm_eo; ++i){
            putchar(buf[i]);
        }
        printf("\n");                                                                                                                                  
    }      
    regfree(&reg);
    return 0;
}

<think> 我们被要求回答:查看文件内容筛选文件内容的方法 引用[1]和[2]提供了Linux下查看文件内容的多种命令,其中一些命令本身就具有筛选功能,比如grep, awk, sed等。 此外,我们还可以通过管道(pipe)将查看文件内容的命令和筛选命令结合起来使用。 因此,我们可以从以下几个方面来回答: 一、使用自带筛选功能的命令 二、通过管道组合命令进行筛选 三、使用文本处理工具进行高级筛选 注意:用户可能是在Linux环境下使用WindTerm这样的终端工具,所以我们的回答主要围绕Linux命令。 另外,引用[3]提到了C#读取文本文件筛选内容,但用户的问题似乎更关注命令行方式,所以我们以命令行方式为主,但也可以简单提一下编程方式(如果用户需要)。 我们将按照以下结构回答: 1. 基本筛选方法(grep, sed, awk等) 2. 组合命令示例(管道使用) 3. 进阶筛选正则表达式、多条件筛选等) 4. 编程方法简要说明(C#、Python等) 最后,生成相关问题。 注意:在回答中,对于数学表达式(如果有的话)要使用$...$,但我们这里主要是命令示例,可能涉及较少数学表达式,但如果有例如行号等数字,不需要用数学表达式。 </think> 以下是在 Linux 环境中查看文件内容筛选内容的常用方法,结合命令行工具和管道操作实现高效文本处理: ### 一、基础筛选方法 1. **`grep` 关键字搜索** 搜索包含特定模式的行(支持正则表达式): ```bash cat 文件名 | grep "关键词" # 基础搜索 grep -i "error" 日志文件 # 忽略大小写找错误[^1] grep -C 3 "warning" 文件 # 显示匹配行及前后3行 ``` 2. **`awk` 字段提取** 按列筛选内容(适合结构化数据): ```bash awk '$1 > 100 {print $2,$5}' 数据文件 # 提取第1列>100的行的第2、5列 awk '/2023-/ &amp;&amp; /ERROR/' 日志文件 # 同时含"2023-"和"ERROR"的行[^2] ``` 3. **`sed` 行范围筛选** 按行号或模式提取区间: ```bash sed -n '10,20p' 文件 # 仅显示10-20行 sed -n '/START/,/END/p' 文件 # 提取两个模式间的所有行 ``` ### 二、组合管道操作 1. **多级筛选(管道链)** ```bash cat 大文件 | grep "关键事件" | awk '{print $3}' | sort | uniq -c ``` 流程说明: `提取包含关键词的行` → `保留第3列` → `排序` → `统计重复值数量` 2. **实时日志监控筛选** ```bash tail -f 实时日志 | grep --line-buffered "ERROR\|WARN" ``` `--line-buffered` 确保实时输出匹配行 ### 三、高级筛选技巧 1. **正则表达式增强** ```bash grep -E "[A-Z]{3}-\d{5}" 文件 # 匹配如ABC-12345的编号 awk '$4 ~ /^4[0-9]{2}$/ {print}' 文件 # 第4列为400-499的HTTP状态码 ``` 2. **反向筛选(排除内容)** ```bash grep -v "DEBUG" 日志文件 # 排除含DEBUG的行 awk '!/192\.168\.1\.100/' 访问日志 # 排除特定IP ``` 3. **多文件联合筛选** ```bash grep "异常事件" *.log # 所有日志文件中搜索 awk 'FNR==1 {print ">> 文件:" FILENAME} /error/' *.txt # 输出文件名+错误行 ``` ### 四、编程语言处理(示例) **C# 筛选特定内容**(引用[3]扩展) ```csharp var lines = File.ReadLines("data.txt") .Where(line => Regex.IsMatch(line, @"\b(紧急|故障)\b")) // 含关键词的行 .Select(line => line.Split()[2]); // 提取第三列 foreach (var line in lines) Console.WriteLine(line); ``` **Python 单行筛选** ```bash python -c "import sys; print([line for line in sys.stdin if '异常' in line])" < 文件 ``` > ⚠️ 筛选性能提示:处理超大文件时优先使用 `grep/awk/sed` 替代 `cat`+管道,减少内存占用[^1]。 ```mermaid graph LR A[原始文件] --> B{筛选目标} B -- 关键词匹配 --> C[grep] B -- 列数据提取 --> D[awk] B -- 行范围控制 --> E[sed] B -- 复杂逻辑 --> F[awk+正则] C --> G[结果输出] D --> G E --> G F --> G ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值