shell 通用命令之文件管理(一)

170 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第28天,点击查看活动详情

引言

好好活,做有意义的事;做有意义的事,就是好好活.

您能在这里看到啥

  1. 数据准备
  2. cat
  3. cmp
数据准备
  • 目录结构

      .
      ├── test.txt //测试文本
      └── ts.sh // 测试脚本
    
  • 测试数据

    截屏2022-12-21 10.58.57.png

cat
  • 含义

    用于连接文件并将文件内容打印把文件内容返回接收者.

  • 语法

    cat [选项] [文件]

    简单举例:cat test.txt

  • 常用功能

    • 显示文件内容

      cat test.txt
      
    • 创建新文件并写入数据

      cat >"newts.txt" <<EOF
      我是测试数据
      EOF
      
    • 多个文件合并显示

      cat newts.txt test.txt > subtest.txt
      

    经过上面命令我们测试数据,如下所示 截屏2022-12-21 11.34.34.png

  • 常用命令参数

    • -n,-number

      • 含义

        由数字1开始对所有输出的行数编号

      • 事例

        cat -n test.txt
        输出结果
        1 初始化
        2 aaa
        3
        4 Ffff
        
    • -b, --number-nonblank

      • 含义

        和上面的-n效果基本上是一样的.只是会对空白行不进行编号处理.编号依次顺延

      • 事例

        cat -b test.txt
        输出结果
        1 初始化
        2 aaa
        
        3 Ffff
        
    • -s, --squeeze-blank

      • 含义

        遇到连续两行空白.会转换成一行空白.不显示行数

    • -v , --show-nonprinting

      • 含义

        用 ^ 和 M- 符号,除了 LFD 和 TAB 之外

    • -e, --show-ends

      • 含义

        在每行结束的时候显示$

  • 文件内容

    • 获取内容

      这里总结一下.平时获取内容的方法

      1. cat

        content=$(cat "$test")
        echo "$content"
        
        # 使用for 循环打印
        for line in $p; do
            echo "$line"
        done
        
      2. read

        while read -r line; do
           echo "$line"
        done <"$test"
        
      3. cat + read

        while IFS= read -r i; do echo "${i%?}"; done <"$test"
        
    • 清空内容

      cat /dev/null > "$test"
      
cmp
  • 含义

    用于比较两个文件是否存在差异.当文件存在差异的时候,辉县市第一个不同之处字符串和列数编号.如果相同则什么都不输出

  • 语法

    cmp [参数] [第一个文件] [第二个文件]

  • 参数

    参数含义
    -s, --quite --silent不显示错误信息 文件相同只返回0,文件不同返回1,发生错误返回2
    -l, --verbose显示出每一个不同点的字节号(10进制)和不同点的字节内容(8进制)
    -i NUM --ignore-initial=NUMNUM字节后开始比较
    -i NUM:NUM2 --ignore-intial=NUM:NUM2第一个文件从NUM开始.第二个文件从后NUM2开始
    -n NUM, --bytes=NUM设定比较字节上限.最多比较NUM字节
  • 事例

    cmp newts.txt subtest.txt
    # 输出结果
    cmp: EOF on newts.txt 表示subtest.txt 前半部分和 newts.txt 是相同的.剩下的还是有不同
    
    

学习资料