• 常用文本操作命令


    1. tr 按列替换

    • echo "{123}" | tr -d '{}' 删除输入中的 "{" 和 "}"

    • cat testfile |tr a-z A-Z 将文件testfile中的小写字母全部转换成大写字母

    2. cut : cut [-b] [file] 列切分

    cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

    如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

    • echo "123,456" | cut -d "," -f 1 以","分隔截取输入中的每行的第一部分内容输出.

    • who | cut -b 3 以字节为分隔, 输出每行的第三个字节. -c 是以字符为分隔

    • count=$(echo -e "${line}" | cut -f 2) 其中,line中字符是以tab作为分隔符!

    3. chown, chgrp, chmod 权限

    sudo chgrp root * 修改当前目录下所有文件为root组

    sudo chown root * 修改当前目录下所有文件的owner为root

    sudo chmod 777 -R dir 递归修改dir的权限为777

    sudo chmod 755 file.sh 修改file.sh为任何人可执行权限

    4. sudo

    • sudo -l 查看当前用户运行命令权限

    • sudo -u <user> command 使用user用户执行命令command

    5. uniq 去重

    uniq -c file 在每行的旁边增加重复的数量。

    6. nl 输出前加行号

    • nl file在输出的内容前加行号

    • nl -b a file 遇到空行,也加行号。

    • nl -n rz -w 3 file 行号3位对其,前面补0.

    7. shuf 打乱文件顺序

    • shuf sort_file -o rsort_file

    8. split 将文件切分

    • split -5000 filesplit -l 5000 file 将file按行切分成多个文件, 文件最大行为5000

    • split -5000 -d file 以数字作为后缀,默认:xaa,xab,xac, 现在x00,x01,x02

    • split file.txt -b 10M 将文件file.txt平均切分成10M

    合并文件

    • cat x* > file.txt 将以x开头的所有文件合并到file.txt`中

    • cat file1 file2 > file3 将file1和file2合并保存到file3中.

    文件内容顺序, 按照file1+file2的顺序保存到file3

    模式切分csplit

    将文本文件file以第 2 行为分界点切割成两份,命令: csplit testfile 2

    文件求交,差,补

    cat a b | sort | uniq > c # c 是 a 并 b

    cat a b | sort | uniq -d > c # c 是 a 交 b

    cat a b b | sort | uniq -u > c # c 是 a - b

    9. sed按行操作文本(大文本操作)

    大文本数据修改,编辑,保存,不能用编辑器打开,可以借助sed对大文件进行修改

    sed编辑行以1为起始index!

    详解

    • -e 多次编辑

    nl file | sed -e '3,$d' -e 's/bash/blueshell/' 删除第三行到最后一行,然后将1-2行中匹配bash的字符串替换成blueshell字符串

    sed -e 4a ewLineContent file 在第四行后天添加一行内容newLineContent

    • -n 仅显示script处理后的结果。

    nl /etc/passwd | sed -n '5,7p' 仅列出文件的5-7行。

    nl /etc/passwd | sed -n '/root/p' 仅列出匹配root的行

    • -i 直接编辑源文件危险动作

    sed -i 's/.$/!/g' file 将file的最后一行中的.替换成!

    sed -i '$a # This is a test' file 在最后一行,再添加一行内容: # This is a test' file

    nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}' 首先匹配所有bash行,然后执行{}里面的一组动作,替换bash为blueshell,p打印,q退出!

    -e 接的动作:

    • a :新增, 在当前行的下一行添加,是新的一行

    • i :插入, 在当前行的上一行插入,是新的一行

    • c :取代

    • d :删除, 后面没有内容;

    nl file | sed '2,5d' 删除第二到五行!

    sed '2d' file 删除第二行

    nl file | sed -n '/root/p' 删除所有行中包含root的行!

    • p :打印列。通常 p 与参数 sed -n 一起用

    • s :替换,/要被取代的字串/新的字串/g

    使用

    1. 查找行号 grep -n --color '您的司机账户已被冻结' outbox.csv

    2. 删除对应行号保存: sed -e 5d file1 > ./file2 删除第五行 并保存到当前目录下的file2文件中。

    3. 删除匹配项: cat file1 | sed '/hello/d' > ./file2 删除所有行中包含hello字符串的行保存。

    nl file1 | sed '/hello/d' > ./file2 在每行内容前加一个行号,保存到文件中!

    10. 只输出一行中匹配的字符串.

    语法: grep -o 'regex'

    • less file* | grep type | grep -o 'user[.*]user_id' | grep -o '[.*]' | sort | uniqfile开头的所有文件中,每行包含type的字符串,提取字符串中以user[.*]user_id形式存在[]中的内容!
    生命不止,奋斗不息!
  • 相关阅读:
    MYSQL57密码策略修改
    dataSource' defined in class path resource [org/springframework/boot/autocon
    ubuntu14.04 red5
    hadoop中修改端口号
    FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to controller/192.168.1.183:9000. Exiting. java.io.IOExcep
    hadoop ssh 问题WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    openstack安装dashboard后访问horizon出错 End of script output before headers: django.wsgi
    sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) Cannot add a NOT NULL column with default value NULL [SQL: u'ALTER TABLE address_scopes ADD COLUMN ip_version INTEGER NOT NULL']
    mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")
    OpenStack安装keyston 错误BError: (pymysql.err.InternalError) (1071, u‘Specified key was too long; max key length is 767 bytes‘) [SQL: u‘ CREATE TABLE migrate_ver
  • 原文地址:https://www.cnblogs.com/huzongzhe/p/6895932.html
Copyright © 2020-2023  润新知