6.inux文本操作命令

七言 2025-8-1 10 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 条评论