zoukankan      html  css  js  c++  java
  • Linux中实现文本过滤

    alias命令

    功能:设置指令的别名
    语法:alias [别名]=[指令名称]
    参数:若不加任何参数,则列出所有别名的设置
    说明:alias仅作用于当前登录的shell。若要永久使用别名,可在/etc/profile或用户家目录下~/.bashrc中设定指令的别名。
    如果想给每一位用户都生效的别名,需要在/etc/bashrc最后追加。例如

    echo "lftps='lftp 172.168.0.1'" > /etc/bashrc
    

    grep命令

    功能:打印符合模式的行
    语法:grep [OPTIONS] PATTERN [FILE....]
    参数:-v ,--invert-match select non-matching lines
    -E,--extended-regexp 匹配扩展的正则表达式
    举例:显示/etc/passwd中不以/bin/bash结束的行

    grep -v "/bin/bash$" /etc/passwd
    

    找出/etc/passwd文件中,包括二位数字或三位数字的行

    grep -E "[0-9]{2,3}" /etc/passwd
    

    显示/proc/meminfo文件中以大写或小写S开头的行

    grep -E ^[s,S] /proc/meminfo
    sed -r -n  '/^[s,S]/p' /proc/meminfo
    cat /proc/meminfo | awk '/^[s,S]/ '
    

    sed命令的-r选项表示启动扩展的正则表达式

    egrep实现dirname功能

    echo /etc/nginx/conf.d/vhosts/a.com.conf | egrep "^/.*/"
    /etc/nginx/conf.d/vhosts/a.com.conf

    过滤ifconfig结果中的IP地址

    ifconfig | awk '/inet[6]?/ {print $2}'
    192.168.2.104
    fe80::20c:29ff:fe30:eed7
    127.0.0.1
    ::1

    vi自定义功能

    set autoindent  
    #自动缩进
    set tabstop=4
    #一个tab占4个space字符
    set shiftwidth=4
    #自动缩进4个字符
    function AddTitle()
    #定义标题
    call setline(1,"#!/bin/bash")
    call append(1,"#====================================================")
    call append(2,"# Author: feng_land@163.com")
    call append(3,"# Create Date: " . strftime("%Y-%m-%d"))
    call append(4,"# Description: ")
    call append(5,"#====================================================")
    endf
    map <F4> :call AddTitle()<cr>
    #在vim屏幕中按F4键可唤出此输出
    
    # 脚本实现自动添加3个用户,并计算3个用户的UID之和  
    #!/bin/bash
    #====================================================
    # Author: feng_land@163.com
    # Create Date: 2018-12-02
    # Description:自动添加三个用户,并计算三个用户uid之和
    #====================================================
    SUM_UID=0
    
    for ((i=1;i<=3; ));do
        USERNAME=user$RANDOM
    	if id $USERNAME 2> /dev/null;then
    	    continue
    	else
    	    adduser $USERNAME
    		USERID=`id -u $USERNAME`
    		SUM_UID=$[ $SUM_UID + $USERID ]
    		let i++
    	fi
    	
    done
    echo $SUM_UID
    

    find命令详解

    功能:在目录层级中查找文件
    语法:find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
    工作方式:沿着文件层次结构向下遍历,匹配符合条件的文件,执行相应的操作
    1.根据文件名或正则表达式进行搜索
    选项-name的参数指定了文件名所必须匹配的字符串。可以将通配符作为参数使用。.txt能够匹配所有以.txt结束的文件名。选项-print在终端中打印出符合条件的文件名或文件路径,这些匹配条件通过find命令的选项给出。
    find /home/slynux -name "
    .txt" -print
    find命令有一个选项-iname(忽略字符大小写),与-name类似,只不过在匹配名字时会忽略大小写。
    例如
    find . -name "example" -print
    如果想匹配多个条件中的一个,可以采用OR条件:
    find . ( -name "
    .txt" -o -name ".pdf" ) -print
    选项-path的参数可以使用通配符来匹配文件路径。-name总是用给定的文件名进行匹配,-path则将文件路径作为一个整体 进行匹配。例如
    find / -path "
    /slynux" -print
    正则表达式是通配符的高级形式,它可以指定文本模式。
    2.否定参数
    find也可以使用!否定参数的含义。例如:
    find . ! -name "
    .txt" -print
    可以打印不以.txt结尾的文件名。
    3.基于目录尝试搜索
    find在使用时会遍历所有的子目录。可以深度选项-maxdepth和mindepth来限制find命令遍历的目录深度。
    使用下列命令将find命令向下的最大深度限制为1
    find . -maxdepth 1 -name "f*" -print
    该命令打印当前目录下所有以f开头的文件。即使有子目录,也不会遍历。与之类似,-maxdepth 2最多向下遍历两级子目录 。
    4.根据文件类型搜索
    Unix将一切都视为文件。文件具有不同的类型,例如普通文件、目录、字符设备、块设备、符号链接、硬链接、套接字以及FIFO等。
    -type可以对文件类型进行过滤,例如只列出目录 :
    find . -type d -print
    可以按照下表的内容用type参数来匹配所需要的文件类型

    文件类型 类型参数
    普通文件 f
    符号链接 l
    目录 d
    字符设备 c
    块设备 b
    套接字 s
    FIFO p
    5.根据文件时间进行索引
    Unix/Linux文件系统中的每一个文件都有三种时间戳,如下所示:  
    **访问时间**(-atime):最近一次访问时间。
    **修改时间**(-mtime):最后一次被修改时间。
    **变化时间**(-ctime):文件元数据( 如权限所所属主)最后一次被修改时间。  
    

    在Unix中并没有所谓“创建时间”的概念

    -atime、-mtime、-ctime可作为find的时间选项。它们可以用整数值指定,单位是天,通常还有-或+,-表示小于,+表示大于。
    打印出最近7天内被访问过的所有文件:
    find . -tyep f -atime -7 -print
    打印出刚好在7天前被访问过的所有文件:
    find .-type f -atime 7 -print
    打印访问时间超过7天的所有文件
    find . -type f -atime +7 -print

    -atime、-mtime、-ctime都是基于时间的参数,其计量单位是天。还有一个基于时间的参数是以分钟作为计量单位的。这些参数包括:
    -amin(访问时间)
    -mmin(修改时间)
    -cmin(变化时间)

    find另一个特性是-newer参数。使用-newer,可以指定一个用于比较时间戳的参考文件,然后找出比参考文件更新的所有文件。例如查找 比find.txt修改时间更近的所有文件:
    find . -type f -newer file.txt -print

    6.基于文件的大小搜索
    使用-size选项可以根据文件的大小进行搜索
    find . -type f -size +2K
    大于2K的文件
    find . -type f -size 2K
    等于2K的文件
    find . -type f -size -2K
    小于2K的文件
    除了K之外还可以用其他文件大小单元。
    b--块(512字节)
    c--字节
    w--字
    k--1024字节
    M--1024K字节
    G--1024M字节
    7.删除匹配的文件
    -delete可以用来删除find查找到的匹配文件
    删除当前目录下所有的.swp文件:
    find . -type f -name "*.swp" -delete
    8.基于文件权限和所有权的匹配
    -perm指明find应该只匹配具有特定权限值的文件
    find . -type -perm 644 -print
    打印出权限为644的文件
    -user USER能够找出由某个特定用户所拥有的文件。参数USER可以是用户名或UID。例如,打印也用户slynux拥有的所有文件:
    find . -type f -user slynux -print
    9.利用find执行命令或动作
    find命令可以借助-exec与其他命令进行组合。示例如下:
    find . -type -user root -exec chown slynux {} ;
    在这个命令中{}是一个与-exec选项搭配使用的特殊字符串。对于每一个匹配的文件,{}会被替换成相应的文件名。

  • 相关阅读:
    通过web端启动关闭服务器程序以及检测程序运行状态
    Windows 自动监听程序,游戏服务器挂掉以后,自动监听程序将其重启起来
    自动监听程序,如果程序挂了,就重启
    删除log
    封装了一个C++类,当程序意外崩溃的时候可以生成dump文件,以便确定错误原因。
    贝塞尔曲线
    golang sql连接池 超时 数据库自动断开 ->127.0.0.1:3 306: wsarecv: An established connection was aborted by the software in your host machine.
    带控制的抢庄牛牛
    龙虎斗控制
    回归模型与房价预测
  • 原文地址:https://www.cnblogs.com/feng-land/p/10055456.html
Copyright © 2011-2022 走看看