zoukankan      html  css  js  c++  java
  • Shell笔记——文本操作

    chattr 设置文件为不可修改,不可删除 

    # 设置为不可修改
    chattr +i filename
    
    # 还原为可修改
    chattr -i filename

    只列出目录

    ls -d */
    
    ls -F | grep "/$"
    
    ls -l | grep "^d"
    
    find . -maxdepth 1 -type d -print

    查看文件详细内容

    stat filename

    把命令输出打印到无底洞

    command > /dev/null 2>&1 &

    paste 按列合并多个文件

    paste file1.txt file2.txt -d ","

    在windows编辑过的脚本在linux无法执行

    sed -i 's/
    $//' xxxx.sh

    tac  倒序打印文件行

    # 命令名称实际上是cat命令倒写
    tac filename1 filename2
    tac filename
    
    # 从stdin中读取
    seq 5 | tac

    tar 命令

    # 比较归档中文件和文件系统有什么不同:
    tar -df archive.tar
    
    # 排除版本控制的目录(包含子目录):
    tar --exclude-vcs -zcvf DataControl.tar.gz DataControl/

    vim相关

    # 自动补全文件路径
    ctrl+x  ctrl+f
    
    ^  # 跳到一行开始
    $  # 跳到一行结束
    gg  # 跳到文本第一行
    G  # 跳到文本最后一行
    
    # 替换文本
    :%s/pattern/replacement/g

    取消高亮
    :nohl

    # 清空文件
    dG

      

    生成任意大小的文件

    # 该命令会创建一个1MB大小的文件junk.data : if 代表输入文件(input file)
    # of 代表输出文件(output file), bs 代表以字节为单位的块大小(block size)
    # count代表需要被复制的块数 dd if=/dev/zero of=./junk.data bs=1M count=1

    分割文件和数据

    
    

    分割文件成10k(xaa,xab,xac)
    split -b 10k file.txt

    
    

    以数字为后缀 (-d )(-a 后缀长度)
    split -b 10k file.txt -d -a 4

    
    

    自定义分割文件后缀 (split [COMMAND_ARGS] PREFIX)
    split -b 10k file.txt -d -a 4 split_file

    
    

    根据行数分割文件
    split -l 10 file.txt -d -a 4 split_file

    
    

    切分文件名和扩展名 (贪婪:匹配出最后一个扩展)
    filename="Taylorswift.jpg"
    文件名(%:非贪婪 %%:贪婪)(从右向左)
    name=${filename%.*}
    扩展名(#:非贪婪 %%:贪婪)(从左向右)
    extension=${filename#*.}

    
    


    csplit分析文本,切割日志 (server.log)
    SERVER-1
    [connection] 192.168.0.1
    [connection] 192.168.0.2
    [disconnect] 192.168.0.3
    [connection] 192.168.0.4
    SERVER-2
    [connection] 192.168.0.1
    [connection] 192.168.0.2
    [disconnect] 192.168.0.3
    [connection] 192.168.0.4
    SERVER-3
    [connection] 192.168.0.1
    [connection] 192.168.0.2
    [disconnect] 192.168.0.3
    [connection] 192.168.0.4

    
    

    csplit server.log /SERVER/ -s {*} -n 2 -f server -b "%02d.log";rm server00.log
    /SERVER/ 用来匹配某一行,分割过程即从此处开始。
    {*} 表示根据匹配重复执行分割,直到文件末尾为止。可以用{整数}的形式来指定分割执
    行的次数。
    -s 使命令进入静默模式,不打印其他信息。
    -n 指定分割后的文件名后缀的数字个数,例如01、02、03等。
    -f 指定分割后的文件名前缀(在上面的例子中,server就是前缀)
    -b 指定后缀格式。例如 %02d.log ,类似于C语言中 printf 的参数格式。在这里文件名=
    前缀+后缀= server + %02d.log
    因为分割后的第一个文件没有任何内容(匹配的单词就位于文件的第一行中),所以我们删
    除了server00.log

  • 相关阅读:
    在JBuilder8中使用ANT
    协程初探
    JavaScript编写了一个计时器
    Codeforces Round #272 (Div. 1)D(字符串DP)
    UI測试内容
    我为什么做程序猿訪谈录
    使用Java高速实现进度条
    做web项目时对代码改动后浏览器端不生效的应对方法(持续更新)
    将markdown格式转化为bootstrap风格html
    char* 和char[]的差别
  • 原文地址:https://www.cnblogs.com/Vince-blogs/p/9310452.html
Copyright © 2011-2022 走看看