6.inux文本操作命令

七言 2025-8-1 92 8/1

[toc]

Linux文本操作

linux文本的操作命令

awk -按“字段”处理文本

  • 把每一行切成多个字段(默认用空格或TAB分隔),然后对字段做过滤、计算、重组、统计等操作
  • 能够按行读取文件,按字段分割数据,并根据条件进行筛选、计算、格式化输出等操作

    语法

    awk [选项] '模式 {动作}' 文件

  • 模式:何时触发(条件)
  • 动作:触发后做什么(打印、计算、赋值…)(花括号 {} 包含)
  • 常用选项 选项 说明 示例
    -F fs 指定字段分隔符(默认为空格或制表符) awk -F: '{print $1}' /etc/passwd
    -v var=value 定义变量并赋值(传递外部变量给 awk awk -v x=10 'x==10 {print "匹配"}'
    -f scriptfile 从脚本文件中读取 awk 命令 awk -f script.awk file.txt
    BEGIN{} 在处理文件前执行(初始化操作) awk 'BEGIN {print "开始处理"} {print $1}'
    END{} 在处理完所有行后执行(总结操作) awk '{sum+=$1} END {print "总和:", sum}'

  • 内置变量 变量 说明 示例
    $0 当前行的整行内容 awk '{print $0}'(等同于 cat
    $1, $2,... 当前行的第1、第2个字段(从1开始) awk '{print $1, $3}'(打印第1和第3列)
    NF 当前行的字段总数 awk '{print $NF}'(打印最后一列)
    NR 当前行号(从1开始) awk '{print NR, $0}'(打印行号和内容)
    FNR 当前文件中的行号(处理多个文件时有效) awk 'FNR==1 {print "文件新行开始"}' file1 file2
    FS 输入字段分隔符(默认为空格) BEGIN {FS=":"}(等效于 -F:
    OFS 输出字段分隔符(默认为空格) OFS=","(输出字段用逗号分隔)
    RS 输入记录分隔符(默认为换行符) RS="\n\n"(按段落分割)
    ORS 输出记录分隔符(默认为换行符) ORS=" "(输出行用空格分隔)

    awk  [-F fs]  [-v var=value]  [-f scriptfile]  \
         '  BEGIN  { 初始化 }
            模式1  { 动作1 }
            模式2  { 动作2 }
            ...
            END    { 汇总输出 }
         '  file1 file2 ...

    典型示例

  • 提取字段
    # 提取 `/etc/passwd` 中的用户名(第1列)和用户ID(第3列)
    $ awk -F: '{print $1, $3}' /etc/passwd

  • 条件过滤
    # 打印用户ID大于1000的行
    $ awk -F: '$3 > 1000 {print $1}' /etc/passwd

  • 计算总和
    # 计算 `data.txt` 中第一列的总和
    $ awk '{sum += $1} END {print "总和:", sum}' data.txt

  • 格式化输出
    # 格式化输出学生信息(假设 `students.txt` 内容为 "姓名 年龄 专业")
    $ awk '{printf "Name: %-10s Age: %d\n", $1, $2}' students.txt

  • 使用 BEGIN 和 END 块
    # 统计文件总行数
    $ awk 'BEGIN {count=0} {count++} END {print "总行数:", count}' file.txt

    sed -对文件替换/删除/插入

  • 对文本进行逐行处理,并将结果输出到标准输出
  • sed 不会直接修改源文件,除非使用 -i 选项

    语法

    sed [选项] '命令' 文件名

  • 常用选项 选项 作用
    -i 直接修改文件内容(原地编辑)
    -e 指定编辑命令(可多个)
    -n 取消默认输出,仅输出匹配的行
    -r 使用扩展正则表达式(更简洁)

  • sed脚本命令 命令 功能 语法 示例
    s 替换文本 [address]s/pattern/replacement/flags sed 's/Linux/Unix/g' file
    d 删除行 [address]d sed '2d' file 删除第 2 行
    i 插入文本(前) [address]i\text sed '2i\Hello' file 在第 2 行前插入
    a 追加文本(后) [address]a\text sed '2a\World' file 在第 2 行后追加
    c 替换整行 [address]c\new_text sed '3c\New line' file 替换第 3 行
    p 打印行 [address]p sed -n '2p' file 打印第 2 行
    r 读取文件内容 [address]r file sed '2r new.txt' file 第 2 行后插入新文件内容
    w 写入文件 [address]w file sed '3w out.txt' file 将第 3 行写入文件
    = 打印行号 = sed '=' file 打印每行的行号
    q 退出 sed q sed '1q' file 处理完第一行后退出

    经典示例

  • 替换文本(核心功能)
    # 将文件中的 "apple" 替换为 "orange"(只替换每行第一个匹配)
    $ sed 's/apple/orange/' file.txt
     
    # 全局替换(每行所有匹配)
    $ sed 's/apple/orange/g' file.txt
     
    # 替换第2行中的文本
    $ sed '2s/apple/orange/' file.txt
     
    # 替换第2-5行的文本
    $ sed '2,5s/apple/orange/' file.txt

  • 删除行
    # 删除第3行
    $ sed '3d' file.txt
     
    # 删除第2-4行
    $ sed '2,4d' file.txt
     
    # 删除包含 "error" 的行
    $ sed '/error/d' file.txt
     
    # 删除空白行
    $ sed '/^$/d' file.txt

  • 插入/追加文本
    # 在第2行前插入一行 "New Line"
    $ sed '2i New Line' file.txt
     
    # 在最后一行后追加 "End Line"
    $ sed '$a End Line' file.txt

  • 打印特定行
    # 仅打印第5行(-n 抑制默认输出,p 打印匹配行)
    $ sed -n '5p' file.txt
     
    # 打印包含 "warning" 的行
    $ sed -n '/warning/p' file.txt
     
    # 打印第10-15行
    $ sed -n '10,15p' file.txt

- THE END -

七言

8月01日16:05

最后修改:2025年8月1日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论