1 Star 3 Fork 4

Kuangcp / Memo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
LinuxStreamEditor.md 4.78 KB
一键复制 编辑 原始数据 按行查看 历史
Kuangcp 提交于 2023-11-25 19:14 . cache
title: Linux流编辑器
date: 2018-12-15 11:17:35
tags: 
    - 工具
categories: 
    - Linux

目录 start

  1. 流编辑器
    1. tr
    2. colrm
    3. cut
    4. paste
    5. sed
    6. awk

目录 end|2021-02-03 17:25|


流编辑器

参考: 比较linux下各种流编辑器的用法

tr

转换字符

  • 替换:可以使用字符集的形式如tr [a-z] [A-Z] 或者 tr a-z A-Z
  • 压缩:-s 如 echo “you are a man ” | tr -s ' ' ' ' 结果 you are a man
  • 删除:-d 如 echo "you are a man"| tr -d ' ' 结果 youareaman

colrm

cut

man cut

paste

粘贴,合并文件用

使用制表符来合并多个文件对应的行,也可以使用 -d 指定合并符

实例: 默认制表符 paste p3.txt p2.txt p1.txt

指定 paste -d ‘*‘ p3.txt p2.txt p1.txt

sed

使用方式: 操作类型 命令 文件 | sed --help 查看详细

操作类型

  • -n suppress automatic printing of pattern space
  • -e 只在控制台输出的操作的结果内容(全部),源文件不变 缺省选项
  • -i 直接在源文件中进行修改
  • -f file 执行一个 sed 脚本文件中的指令

命令

命令 效果
b label 将执行的指令跳至由 : 建立的参考位置
d 删除行 删除2-4行 sed -i "2,4d" file
D 删除 pattern space 内第一个 newline 字母 前的资料
g 拷贝资料从 hold space
G 添加资料从 hold space 至 pattern space
h 拷贝资料从 pattern space 至 hold space
H 添加资料从 pattern space 至 hold space
l 印出 l 资料中的 nonprinting character 用 ASCII 码
a 新增 在下一
i 插入添加使用者输入的行 将hello插入到第4行:sed -in "4i hello" test.md
n 读入下一笔资料
N 添加下一笔资料到 pattern space
p 打印 sed -n 1p file
P 印出 pattern space 内第一个 newline 字母 前的资料
q 跳出 sed 编辑
r 读入它档内容
w 写资料到它档内
x 交换 hold space 与 pattern space 内容
y 转换(transform)字元
  • c 替换 整行
  • s 替换 行内字符串的替换 命令结构: 's/pattern/relacement/flags'
    • pattern 是正则的 pattern 写法 注意会匹配到首尾的空字符 echo abc | sed 's/a*/l/g' 就很费解
    • replacement 是需要替换成的内容
    • flags 是动作(可以为空)
      • 整数: 一行中的第几处符合 pattern 将被替换
      • g : 全部替换
      • p : 输出修改的行内容
      • w filename : 替换后的文件写入到新文件

多指令执行 sed 's/a//g;s/b//g'

  1. 截取指定行数到新文件 sed -n ‘开始行数,结束行数p’ info.log > newFile.log
  2. 文件内容倒置 sed -i '1!G;h;$!d' filename
  3. 新增内容到第一行 sed -i '1 i\any text' file
  1. 修改配置文件中name的值为123 sed -i "s/name=.*/name=123/g" config.conf
  2. 修改第3行 sed -i '3 s/name/1/g'
  1. 匹配行的行尾追加 sed -i 's/end.*/& ;/g' file
  2. 匹配行后第三行行尾追加sed -i '/gradle/{n;n;n; s/.*/& 6.0/;}' file
  3. CRLF -> LF sed -i 's/\r//g' file
    > 配合 git 使用: git ls-files| xargs sed -i 's/\r//g'
  4. 注意特殊字符的转义 git ls-files | xargs sed -i 's/@a.*/\//g'
  5. 去除换行符 sed -i ':label;N;s/\n/ /;b label' 参考
  6. 处理管道流 echo syx is a good body | sed 's/syx/zsf/'

sokoban sed sed 写的推箱子游戏


awk

awk有多个不同版本: awk、mawk nawk和gawk,若未作特别说明,通常指gawk (gawk 是 AWK 的 GNU 版本)

  1. 输出指定列 cat log.log | awk '{print $2}'
    1. 忽略第一列:awk '{$1="";print $0}'
    2. 忽略1到4: awk '{ for(i=1; i<=4; i++){ $i="" }; print $0 }'
  2. 按列求和 awk '{sum += $1};END {print sum}'
  3. 添加行号 awk '{printf("%2d %s\n", NR, $0);
  4. 读取标准输出 awk '{print $0}' -

参考: awk 入门教程

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/gin9/Memo.git
git@gitee.com:gin9/Memo.git
gin9
Memo
Memo
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891