【Linux 文本处理工具】

文章介绍了如何在Linux环境中使用shell命令sed对文件进行操作,包括当文件为空时如何替换字符,如何覆盖或追加内容,以及如何定位特定行进行替换。还详细讲解了如何指定某行替换和全字匹配替换的语法,以及在文件末尾添加新行的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux 文本处理工具详解

一、符号说明

符号说明
^匹配行首(如 ^abc 表示以 abc 开头的行)
$匹配行尾(如 xyz$ 表示以 xyz 结尾的行)
.*匹配任意字符(正则表达式通配符)
\转义符(如 \$ 表示普通字符 $
`管道符,将前一个命令的输出作为后一个命令的输入
> / >>重定向符(覆盖写入 / 追加写入)

创建/追加文件内容

# 覆盖写入文件(清空原有内容)
echo "Hello World" > file.txt

# 追加内容到文件末尾
echo "New Line" >> file.txt

# 多行输入(EOF 可自定义为其他结束符)
cat << EOF > file.txt
Line 1
Line 2
EOF


二、常用工具及命令

1. sed 流编辑器

常用参数

  • -i:直接修改文件(建议配合备份,如 -i.bak
  • -e:执行多个命令
  • -n:抑制默认输出(常与 p 命令配合)

高频命令

# 全局替换文本(直接修改文件)
sed -i 's/old/new/g' file.txt

# 删除包含 "error" 的行
sed '/error/d' file.txt

# 替换第2行的内容
sed '2c New Content' file.txt

# 在匹配行后追加内容
sed '/pattern/a\Appended Line' file.txt

# 打印第5到10行
sed -n '5,10p' file.txt

#替换多处内容使用-e
sed -e 's/匹配的内容/替换的内容/' -e 's/匹配的内容/替换的内容/'  文件

#替换一行并追加一行
sudo sed -i '/^匹配以x开头的行/ {
  s/匹配的内容/替换的内容/
  a\追加的内容
}' file.txt

#替换整行内容
sed -i '/匹配的内容/c\替换的内容' file.txt

低频操作

  • : 标签跳转:配合 b(跳转)和 t(条件跳转)实现复杂逻辑
  • 保持空间(hold space):用 h, H, g, G 操作暂存数据

2. grep 文本搜索

常用参数

  • -i:忽略大小写
  • -v:反向匹配(排除匹配行)
  • -n:显示行号
  • -E:启用扩展正则表达式
  • -r:递归搜索目录

高频命令

# 搜索包含 "error" 的行(显示行号)
grep -n "error" log.txt

# 排除空行和注释行(假设注释以 # 开头)
grep -vE '^$|^#' config.conf

# 递归搜索目录中所有文件
grep -r "keyword" /path/to/dir

# 统计匹配行数
grep -c "pattern" file.txt

低频操作

  • -L:列出不包含匹配项的文件名
  • -Z:输出以 NULL 字符分隔(配合 xargs -0 处理含空格文件名)

3. awk 文本分析

常用参数

  • -F:指定字段分隔符(默认空格/TAB)
  • -v:定义变量(如 -v var=value

高频命令

# 打印第1列和第3列(逗号分隔)
awk -F',' '{print $1, $3}' data.csv

# 统计文件行数
awk 'END {print NR}' file.txt

# 过滤第3列大于100的行
awk '$3 > 100 {print $0}' data.txt

# 计算第1列的总和
awk '{sum += $1} END {print sum}' numbers.txt

# 自定义输出格式(如添加表头)
awk 'BEGIN {print "Name\tAge"} {print $1, $2}' users.txt

低频操作

  • BEGIN / END 块:处理数据前/后执行的操作
  • 内置函数:如 substr($0,1,5) 截取字符串,gsub(/old/, "new") 全局替换

4. cut 列截取

常用参数

  • -d:指定分隔符(默认 TAB)
  • -f:选择字段(如 -f1,3-f2-5
  • -c:按字符位置截取

高频命令

# 截取第2列(逗号分隔)
cut -d',' -f2 data.csv

# 截取每行前5个字符
cut -c1-5 file.txt

# 结合管道处理数据
echo "John:Doe:30" | cut -d':' -f1,3  # 输出 John:30

低频操作

  • --complement:反选字段(排除指定列)

5. sort 排序

常用参数

  • -n:按数值排序
  • -r:逆序排序
  • -k:指定排序字段(如 -k2 按第2列排序)
  • -u:去重后排序

高频命令

# 按数值逆序排序
sort -nr numbers.txt

# 按第3列排序(逗号分隔)
sort -t',' -k3 data.csv

# 合并并去重两个文件
sort -u file1.txt file2.txt

低频操作

  • -T:指定临时目录(处理大文件时避免磁盘空间不足)

三、组合使用示例

1. 统计日志中不同错误类型的数量

grep "ERROR" app.log | awk '{print $4}' | sort | uniq -c | sort -nr
  • grep 过滤错误行 → awk 提取错误类型 → sort 排序 → uniq 统计 → 按数量逆序排序

2. 批量重命名文件

ls *.txt | sed 's/\.txt$/_backup&/' | xargs -I {} mv {} 
  • ls 列出文件 → sed 修改文件名 → xargs 传递新文件名

四、注意事项

  1. 正则表达式差异
    • grep 默认使用基础正则,sedawk 支持扩展正则(需加 -E-r)。
  2. 性能优化
    • 处理大文件时,优先使用流式工具(如 sed/awk),避免 cat 加载整个文件。
  3. 备份文件
    • 使用 sed -i.bakcp file.txt{,.bak} 避免数据丢失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值