grep sed awk

来源:互联网 发布:数据库应用系统是什么? 编辑:程序博客网 时间:2024/06/06 00:02

linux文本处理grep、sed、awk

  • linux文本处理grepsedawk
    • grep
    • sed
    • awk

grep


grep [options] PATTERN [FILE]

grep 选项 解释 - - 正则表达式的选择 - -E, –extended-regexp 扩展的正则表达式,同命令egrep(已废弃),字符`? + { } - -G, –basic-regexp 基本正则表达式,grep默认执行,字符`? + { } - -F, –fixed-regexp 所有搜索都是普通字符串,不进行正则匹配 - -P, –perl-regexp 使用Perl正则表达式 - -e, –regexp=PATTERN 用PATTERN来匹配 - -f, –file=FILE 指定规则文件 - -i, –ignore-case 忽略大小写 - -w, –word-regexp 强制PATTERN仅完全匹配字词 - -x, –line-regexp 强制PATTERN仅完全匹配一行 - - 杂项 - -s, –no-messages 不显示错误信息 - -v, –invert-match 选中不匹配的行 - - 输出控制 - -m, –max-count=NUM NUM次匹配后停止 - -b, –byte-offset 输出的同时打印字节偏移 - -n, –line-number 输出的同时打印行号 - -H, –with-filename 输出同时打印文件名 - -o, –only-matching 仅输出匹配的部分 - -d, –directories=ACTION 读取目录的方式,read/recurse/skip - -r, –recursive 同 --directories=recurse - -l, –files-with-matches 仅打印匹配的文件名 - -L, –files-without-matches 仅打印不匹配的文件名 - - 文件控制 - -B, –before-context=NUM 打印匹配文本及前NUM行 - -A, –after-context=NUM 打印匹配文本及后NUM行 - -C, –context=NUM 打印匹配文本的前后NUM行

sed


sed (stream editor),sed是一个流编辑器,sed把读入的文本,通过一系列编辑命令转换为另一种格式输出。

sed不会改变源文件。

  • sed的命令格式
sed option 'script' file1 file2 ...sed option -f scriptfile file1 file2 ...

sed处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,命令行参数可以一次传入多个文件,sed会依次处理。sed的编辑命令可以直接当命令行参数传入,也可以写成一个脚本文件然后用-f参数指定。

  • sed的执行的方式
/pattern/action

pattern是正则表达式,action是编辑操作。sed程序一行一行读出待处理文件,如果某一行与pattern匹配,则执行相应的action,如果一条命令没有pattern而只有action,这个action将作用于待处理文件的每一行。

  • 常用选项
sed 选项 解释 - -n 取消打印模式空间 - -r 使用扩展的正则表达式,sed默认运行基本正则匹配 - -s 将输入文件视为各个独立的文件而不是一个长的连续输入 - -u 从输入文件中读取最少的数据,更频繁的刷新输出 - -f = FILE 指定脚本文件 - -e = EXP 指定脚本 - -i 直接修改文件的内容

模式空间: 当前sed处理的行

  • 常用命令
格式 含义 a 新增, a 的后面可以接字串,而这些字串会新增在匹配行的下一行 i 插入, i 的后面可以接字串,而这些字串会插入到匹配行的上一行 c 取代, c 的后面可以接字串,这些字串取代匹配行 d 删除, d 后面通常不接任何东西 p 打印,通常 p 会与 -n 选项一起使用 s 替换,s替换 - - /pattern/p 打印匹配pattern的行 /pattern/d 删除匹配pattern的行 /pattern/s/pattern1/pattern2/ 查找符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2 /pattern/s/pattern1/pattern2/g 查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2 - - - 数字可作为行数的索引地址,用逗号分隔 sed ‘1,10d’ a.txt 删除1-10

awk


sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。

awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义。

awk是一门很复杂的脚本语言,但基本用法和sed类似,它可以运行基本运算和流程控制。

  • awk命令的基本形式
awk option 'script' file1 file2 ...awk option -f scriptfile file1 file2 ...
  • awk的执行方式
/pattern/{actions}condition{actions}

如果某一行与pattern匹配,或者满足condition条件,则执行相应的actions,如果一条awk命令只有actions部分,则actions作用于待处理文件的每一行。
- awk需要熟悉的用法

awk常用的内置变量

变量 含义 FILENAME 当前输入文件的文件名,该变量是只读的 NR 当前行的行号,该变量是只读的,R代表record NF 当前行所拥有的列数,该变量是只读的,F代表field OFS 输出格式的列分隔符,缺省是空格 FS 输入文件的列分融符,缺省是连续的空格和Tab ORS 输出格式的行分隔符,缺省是换行符 RS 输入文件的行分隔符,缺省是换行符 $0 当前整行的内容 1 2 … 第一列 第二列 … BEGIN { … } 在整个文件处理之前执行一次 END { … } 在整个文件处理完成后执行一次

awk常用选项

awk 选项 解释 - -f,–file=progfile 指定awk脚本文件 - -F,–field-separator=fs 重新指定输入文件的列分隔符 awk -F : ... - -v var = value 赋值一个变量 awk -v x=1 ...

变量

awk可以使用变量,但是不需要定义,第一次使用的时候回自动定义变量,变量是全局的。

格式化输出

awk支持printf格式化输出。

$ awk -v x=0 -F '[:, ]' 'BEGIN{OFS="!"} {print $1,$2,$3,$4; x++} END {print x "lines"}' a.txt## -v 声明一个变量并赋值## -F 指定输入文件的列分隔符,用[]指定多个分隔符## OFS='!' 指定输出分隔符为!## END 输出行数
0 0
原创粉丝点击