Linux文本处理

2021-03-15 15:12:24 浏览数 (1)

grep

最常用的正则查找指令,比如结合tail将匹配正则的文件行输出

代码语言:javascript复制
tail 文件名 | grep -E "正则表达式" > "结果输出文件名"

sed

sed适合用于对大文件进行正则替换输出 其处理是实时显示(从文件读取一行匹配一行,结果输出) 不会修改原文件(添加g标记为全部替换,不添加为每行替换首个匹配项)

代码语言:javascript复制
sed 's/正则表达式/替换文本/g'

如果需要保存输出到文件可以类似上面使用重定向输出符

代码语言:javascript复制
sed 's/正则表达式/替换文本/g' > "输出文件名"

find

find指令用于通过正则表达式检索某个文件名所在的完整路径

代码语言:javascript复制
#查找当前目录及其所有子目录下,名称符合对应正则表达式的文件名
find . -name "正则表达式"

还可以结合xargs和grep对匹配的文件的内容进行正则检索 xargs会将文件内容处理为按行输入到缓冲区

代码语言:javascript复制
find . -name "正则表达式" | xargs grep -E "文件内容正则"

awk

awk是比较好用的指令,支持循环、正则和字典等 match函数接受的第一个参数为输入,第二个参数为正则,返回是否存在匹配 substr函数接受的第一个参数为输入,第二个参数为开始切割的下标,第三个参数为切割长度 index函数接受的第一个参数为输入,第二个参数为要查找的子串,返回从左往右找到的第一个子串的位置下标 awk中对于字典、变量不需要定义,第一次赋值即为定义 print函数进行打印输出,带双引号的字符串会作为多个打印的拼接符,并将引号中内容一并输出 对于比较长的awk指令,一般写到文件通过shell执行(命令行需要为单行,awk不需要严格缩进,由{}控制作用域范围) 以下为结合文件,按行读取作为输入,使用字典和字符串函数substr、index的示例

代码语言:javascript复制
awk 'Begin{
    while(getline < "输入文件名"{
        if(match($0,/正则/)){
             var = substr($0,index($0,"subtext"), iLen)
             print var
             dict[key] = var
        }
    }
    close("输入文件名")
    for (key in dict){
         print key","dict[key]
    }
}'

0 人点赞