Willson Chen

Stay Hungry, Stay Foolish.

文本处理三剑客

文本处理

grep

  • grep:正则搜索输出。
  • grep “内容” file.txt,在file.txt文件中搜索包含”内容”的行,并输出。
  • grep -n [abc] file.txt,在file.txt文件中搜索包含”内容”的行,并输出行号。
  • ls | grep “\.txt”,在当前目录下查找后缀名为txt的文件。

sed

  • sed:流编辑器,用脚本命令处理每一行。
  • 常用示例:
    • sed -n ‘2,5 p’ file.txt:将file.txt文件中第2到第5行输出。
    • sed ‘s/abc/xyz/g’ file.txt:将file.txt文件中所有”abc”替换为”xyz”。
    • sed -n ‘/abc/I p’ file.txt:将file.txt文件中包含不区分大小写的”abc”的行输出。
    • sed ‘/^$/ d’ file.txt:将file.txt文件中所有空行删除。
  • 格式:sed [选项][脚本命令] 文件名
  • 常用选项:
    • -n:默认不输出,一般结合脚本命令中的p使用。
    • -i:直接修改文件内容。
  • 常用脚本命令:
    • s替换文本,格式:[address]s/pattern/replacement/[flags]
    • address,指定行号,如
      • 1:首行。
      • 3,5:从3到5行。
      • 4,$:从4到末行。
      • /pattern/:地址支持正则匹配行,区分s后的pattern。
    • pattern:要替换的内容,支持正则。
    • replacement:替换后的内容。
    • flags:
      • g:全局匹配,如果没有则只匹配第一个。
      • p:输出被替换的行,常和-n选项一起使用。
      • I:不区分大小写。
    • d删除行,格式:[address]/d
    • p输出行,格式:[address]/p
    • c替换整行,格式:[address]/c\replacement
    • a行后追加,格式:[address]/c\text
    • i行前追加,格式:[address]/c\text

awk

  • awk:报告生成器,按列处理文本。
  • 常用示例:
    • awk ‘{print $1}’ file.txt:将file.txt文件中每行的第一个字段输出,使用空白分隔。
    • awk -F ‘,’ ‘{sum+=$1} END{print “sum=”,sum}’ file.txt:将file.txt文件中每行的第一个字段相加并输出,使用逗号分隔。
  • 格式:awk [选项][脚本命令] 文件名
  • 常用选项:
    • -F:指定分隔符,默认为连续空白符(包括制表符)。
    • -v:定义变量,格式为-v 变量名=变量值。
  • 常用脚本命令:
    • BEGIN{}:开始处理前执行。
    • {}:处理每一行。
    • END{}:处理完所有行后执行。