Linux(5)、文件内容相关命令

文件内容相关

新增内容

vim

模式化编辑器、全屏编辑器
centos7安装vim:yum -y install vim

三种模式

  • 1、编辑模式,打开vim后默认的模式,没卵用;
  • 2、插入模式,直接可以修改文本内容;
  • 3、末行模式,可以使用命令操作文本内容:

    :10d        删除第10行
    :10,20d     删除第10行-20行

模式之间转换

  • 编辑模式 --> 输入模式:

    i   在当前光标所在字符前面进入输入模式
    a   在当前光标所在字符后面进入输入模式
    o   在当前光标所在行的下方新建一行,并转换为输入模式
    
    I   在当前光标所在行的行首进入输入模式
    A   在当前光标所在行的行尾进入输入模式
    O   在当前光标所在行的上方新建一行并进入输入模式
  • 输入模式 --> 编辑模式:ESC
  • 编辑模式 --> 末行模式: :
  • 末行模式 --> 编辑模式:ESC 可能需要敲击多次

vim相关操作

  • 1、打开文件:

    vim file        普通打开文件
    vim +n file     打开文件且光标位于第n行首部
    vim + file      打开文件并编辑最后一行
    vim +/pattren   打开文件并定位第一次被模式匹配到的行的行首
  • 2、关闭文件
    • 在末行模式下关闭文件:

      :q      不保存退出
      :wq     保存退出
      :q!     强制退出
      :w      保存退出
      :w!     强行保存
      :wq!    强行保存并退出
    • 在编辑模式下退出:ZZ 保存并退出

  • 3、移动光标(编辑模式下)

    # 逐字符移动: 
        箭头
    
    # 按单词为单位移动
        w       # 移至下一单词的词首
        e       # 移至当前或下一个单词的词尾
        b       # 移至当前或前一个单词的词首
    
    # 行内跳转
        0       # 绝对行首
        ^       # 行首的第一个非空白字符
        $       # 绝对行尾,包含空白字符
    
    # 行间跳转
        nG      # 直接跳转至第 n 行行首
        G       # 跳转至最后一行行首
                # 在末行模式下,直接给出行号即可
    
    # 翻屏操作(编辑模式)
        ctrl+f      向下
        ctrl+b      向上
  • 4、删除(字符,单词,行):

    # 命令行删除单个字符:
    x       # 删除光标所在处的单个字符
    nx      # 删除光标所在处以及向后的共n个字符                 
    
    
    # 编辑模式下,跟跳转命令结合使用
        dw      # 删除当前单词 delete word
        dd      # 删除当前所在行  
        ndd     # 往下删除当前所在行在内的n行
    
    # 末行模式:
        :2,4d   # 删除第2-4行
        :2,+5   # 删除第2行以及随后的5行
    
        $d      删除最后一行
        .d      删除当前行
        $-1d    删除倒数第二行
  • 5、复制命令(在编辑模式下):

    yy      复制整行
  • 6、粘贴命令p:

    若复制或删除的内容为整行内容,则粘贴至所在行的下方;

    复制或删除的内容为非整行,则粘贴至光标所在字符的后面;

  • 7、撤销编辑操作:

    u           # 撤销前一次的编辑操作,可以连续使用n次
    nu          # 撤销最近n次的编辑操作
    ctrl+r      # 撤销最近一次的撤销操作
  • 8、重复前一次的编辑操作:.

  • 9、查找:

    /pattren
    ?pattren
  • 10、查找并替换(在末行模式下)

    n,ms/ad/AD/g        # 在n-m行,将ad替换成AD
    
    1,3s/hello/hi/g    # 在1-3行中将hello字符串替换为hi
echo

重定向有相关介绍

  • 追加一行内容到文件末尾:echo asasas >> file

  • 清空原文件并写入内容:echo asasas > file

  • 追加多行内容:

    cat >> 3.txt << EOF
    > q
    > w
    > e
    > rt
    > EOF

查看内容

cat

查看所有内容

  • -n 显示行号
  • -c 按字节显示,例如-c3显示前三个字节(貌似不存在)
  • --help 查看介绍,和man作用类似,但包含中文

默认查看前10行内容,可以指定要显示的行数。

  • -n:显示前n行

    [root@localhost ~]# head -2 1.txt 
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
tail

默认查看后10行内容,可以指定要显示的行数。

  • -n 显示最后的n行
sed
  • stream editor for filtering and transforming text。
  • 默认不编辑原文件,仅对模式空间的数据做处理。

  • 格式sed 'AddressCommands' file ...

  • options
    • -n:静默模式,不显示模式空间中的内容
    • -i直接修改原文件
    • -e:可以同时执行多个脚本
    • -f:保存至文件/path/to/scriptsed -f /path/to/script file将指定文件中的脚本运行在file上
    • -r:表示使用扩展正则表达式
  • Address:与后面的commands结合使用

    # 1、Startline、Endline
        例如: 1,100
        $   表示最后一行
        $-1  倒数第二行
    
    
    # 2、/RegExp/
        /^root/                 # 表示以root字符串开始的行
        sed '/3/d' file         # 不显示包含3的行
        sed -n '/a/p' 1.txt     # 显示包含字符a的行
    
    
    # 3、/pattren1/,/pattren2/,正则匹配
        # 第一次被pattern1匹配的行开始,到第一次被pattern2匹配到的行结束中间的所有行。
    
        sed -n /hi/,/a/p 1.txt  
            # 显示从第一次匹配到字符 hi 和字符 a 以及之间所有行
    
    
    # 4、指定行
        sed -n 'mp' 1.txt   # 显示第m行
    
        [root@localhost ~]# sed -n 2p 3.txt 
        b
    
    
    # 5、Startline, +N       # 从startline开始,向后的N行
        sed '1,+3d' file    # 删除1-4行
    
        [root@localhost ~]# sed 1,+2d 3.txt   # 输出删除后剩余的所有内容
        d
        e
        f
        g
        h
        [root@localhost ~]# cat 3.txt 
        a
        b
        c
        d
        e
        f
        g
        h
  • Commands

    # 1、d  删除(不显示)符合条件的行
        sed 1,2d file   # 显示除了1-2行的其他行
    
    
    # 2、p  显示符合条件的行,结合 -n 使用,只显示符合条件的行
        sed -n '/^a/p' 1.txt   # 显示以 a 开头的所有行
    
    
    # 3、na\string  在指定的行的下一行后追加新的行 after
        sed '3a\hahaha' 1.txt    # 在第三行下一行追加hahaha字符串
    
    
    # 4、ni\string  在指定的行的前一行追加新的行
    
    
    # 5、r file  将指定文件的内容添加至符合条件的行处
        sed 'nr demo1.sh' f1.txt    
            # 读取demo1.sh的所有内容,将其放在 f1.txt 的第 n 行后面
    
    
    # 6、w file   将指定文件的内容添加至指定的文件中,会清空目标文件
        sed '/a/w f2.txt' f1.txt    # 将f1.txt中包含字符a的行写入文件f2.txt中   
    
    
    # 7、s/pattren/string/  
         sed 's/a/A/' f1.txt        # 将字符a替换为字符A
         sed 's/.*a.*/A/' f1.txt    # 将包含a的行替换字符A
    
    
         -g     # 全局替换,只要匹配就替换
                sed 's/a/A/g' f1.txt   # 替换每行中所有的a为A
    
    
         -i     # 忽略大小写
                sed s/h/Y/i 3.txt 
    
    
         # 分隔符可以为 s###. s@@@
         # 不要使用要替换的字符为分隔符
    
    
         &      # 引用前面匹配到的字符串:
            sed 's/a/&r/g' f1.txt   # 在匹配到的a字符后追加r字符
    
    
            sed 's#l\(..e\)#L\1#g' f1.txt 
                    # 只将以e结尾中间只有两个字符的l替换为L,例
                hello,my love
                hello, linux
                    >>> 
                hello,my Love
                hello, linux
awk

显示某一行或多行,pattern scanning and processing language

awk 'NR==n' 3.txt  # 显示第 n 行内容

awk "NR==n, NR==m" 3.txt  # 显示 n-m 行的内容   
grep
  • Global Research 根据模式搜索文本并将符合模式的文本行显示出来,部分匹配。
  • Patterns 由文本字符 和 正则表达式的元字符组合而成的匹配条件

  • options:
    • -i 忽略大小写
    • --color 匹配的内容高亮显示
    • -v 反向查找
    • -o 只显示匹配到的字符串
    grep 'ab' 1.txt     # 查看包含 字符 ab 的所有行
    grep -v '2' 1.txt   # 列出所有不包含 字符 2 的行
  • 正则表达式

    .           # 匹配任意单个字符
    
    *           # 匹配其前面的字符任意次  
    
    .*          # 匹配任意多个任意字符
    
    \?          # 匹配前一个字符0或1次
    
    \{n, m\}    # 匹配前面的字符至少n次,之多m次
    
    ^           # 字符出现在行首
    
    $           # 字符出现再行尾
    
    ^$          # 空白行
    
    []          # 指定集合内的任意一个字符
    
    [^]         # 非
    
    [:digit:]  # 同通配符使用
        grep '[[:digit:]]' 1.txt   # 匹配包含数字的行
cut

按分割后指定位置取每行对应列的内容。

  • -d:指定分隔符,默认是一个空格
  • -f:指定要显示的字段
[root@localhost ~]# cat 3.txt 
sdasda
a 12as asdasdv
vc 12as asdasds
d 12a asdasdf
[root@localhost ~]# cut -d' ' -f1 3.txt   # 按照空格分割,显示每行的第一个字段
sdasda
a
vc
d


cut -d' ' -f1,2 1.txt   # 每行的第1个和第2个字段
cut -d' ' -f1-3 1.txt   # 显示每行的第 1-3 个字段
sort
  • 查看文件内容并按行排序
  • 默认按照行首个字符在ascii对应的十进制数字大小升序排序
  • options
    • -n 按照数值大小排序
    • -r 降序
    • -t 指定分隔符
    • -k 指定字段,sort -t: -k3 -n /ect/passwd
    • -u重复行只显示一次
    • -f不区分大小写
uniq

相邻并完全一样的行只显示一次

[root@localhost ~]# cat 3.txt 
a
bb
aa
aa
bb
cc
cc
  • -d 显示重复行,只显示一次

    [root@localhost ~]# uniq -d 3.txt 
    aa
    cc
  • -D 显示重复行,有多少显示多少

    [root@localhost ~]# uniq -D 3.txt 
    aa
    aa
    cc
    cc
  • -c 显示重复的行和对应的次数

    [root@localhost ~]# uniq -c 3.txt 
    1 a
    1 bb
    2 aa
    1 bb
    2 cc
wc
  • 统计文本内容(行,单词,字节数)
  • options:
    • -l 显示行数
    • -w 显示单词数
    • -c 显示字节数
    • -m 字符数
    • -L 最长的一行包含的字符数
fangqihan@fangqihan-PC:~/data$ wc 1.txt
10    18   80  1.txt
行  单词 字节 
tr

translate or delete characters
显示替换后的字符,其中ac代指集合,而非一个字符串

tr 'ac' 'bd' < file     # 将文件中的字符a替换成字符b

tr 'a-z' 'A-Z' < file   # 将小写换成大写字母

tr -d '1' < file  # 删除字符1

猜你喜欢

转载自www.cnblogs.com/fqh202/p/9434401.html