[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.txtBEGIN{}在处理文件前执行(初始化操作) 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 file2FS输入字段分隔符(默认为空格) 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.txtsed -对文件替换/删除/插入
- 对文本进行逐行处理,并将结果输出到标准输出
sed不会直接修改源文件,除非使用-i选项语法
sed [选项] '命令' 文件名-
常用选项: 选项 作用 -i直接修改文件内容(原地编辑) -e指定编辑命令(可多个) -n取消默认输出,仅输出匹配的行 -r使用扩展正则表达式(更简洁) -
sed脚本命令: 命令 功能 语法 示例 s替换文本 [address]s/pattern/replacement/flagssed 's/Linux/Unix/g' filed删除行 [address]dsed '2d' file删除第 2 行i插入文本(前) [address]i\textsed '2i\Hello' file在第 2 行前插入a追加文本(后) [address]a\textsed '2a\World' file在第 2 行后追加c替换整行 [address]c\new_textsed '3c\New line' file替换第 3 行p打印行 [address]psed -n '2p' file打印第 2 行r读取文件内容 [address]r filesed '2r new.txt' file第 2 行后插入新文件内容w写入文件 [address]w filesed '3w out.txt' file将第 3 行写入文件=打印行号 =sed '=' file打印每行的行号q退出 sed qsed '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 -
最后修改:2025年8月1日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.qian777.cn/53.html
共有 0 条评论