• 实用命令与文本处理


    实用命令

    ll dirname | grep jpg | wc –l       //count the num of jpg file in dirname

    find  //同locate,只不过直接从硬盘中查找数据,更慢但更准确

    du –h  //读取文件夹大小

    tree -d  //查看当前文本夹中所有文件夹的树状分布

    !keyword   //用于执行keyword 相关的历史命令

    which commond  //查找shell命令所在的位置

    变量处理

    conf_name=$(basename -- "$conf_path")  //只要文件名不要路径

    ${conf_base%.xxx}  // 只要文件名前面,不要.jpg或者其它.xxx后缀

    文件采样

    awk '{if(NR%5==0) print $0}' input.list > out.list  //每隔5行取其中一行

    判断目录是否存在并删除或者创建

    if [ ! -d $dir_name ]; then

      mkdir -p $dir_path

    else

      rm $dst_path 

    文本处理

    echo string | cut -d 'c' -f1   //将string第一个字符'c'之前的substring取出

    echo string | awk -F 'c' '{print $1 $2}'  //以'c'为分隔符,将string分为substr

    //  1.awk功能类似于cut,但处理表格形式的文本更方便

    //  2.若不指定'c',则默认以空格来分割string

    echo string | sed  "s/sub1/sub2/g"   

    //  1.将string中所有substring1替换为substring2,如果不加‘g’,则只替换第一个

    //  2.如何是在文本最后添加字符,可用sed "s/$/sub/",因为文本在每行最后都会有一个不可见的'$',行首 ^

    //    3.当被替换或被替换字符为变量时,如果变量里面含有/,则会报错: sed -e express #1, unkown option to s,必须把/转义或去掉

    //  4.当被替换变量中含有/时,也可以将改分隔符来解决如

    sed -i "s!$url!$1!g" datasource.properties

    $(basename -- "${data_path}")  //将绝对data_path中的文件名作为变量取出来

    ${filename%.*}  //将xxx.ext的后缀取掉

    ``    //是tab上方的`,用这个符号将命令包起来,可以把命令执行的结果作为变量保存

    [ref](https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html)

    文件重定向

    1. xxcommand > output 2&1

      //将xxcommand的命令的所有输出信息导入到output文件中

      //如果不加2&1 参数的话,仅会把xxcommand的正确结果保存下来,而不会保存过程信息

      //1: stdout          2: stderr

    2. nohup xxcomand &  && tail -f nohup.out

    递归寻找一个文件夹里面含有特定串的文件

    1. grep -n -H -R "main", Note: “main”里面不加”*”,否则任务字符串都找不到

    2.  find . -name "*.cpp" -print | xargs -I{} grep -Hn "main" {}

      “|” 之前表示寻找文件夹中所有.cpp为后缀的文件并打印,

      “|” 之后表示以“{}”代表打印出的每一行,并在每一行里抓取”main”字符。

      -H 表示显示找到的文件名,-n表示打印行号

    shell编程示例

    实现将DATA文件夹中所有*.jpg的文件名字写入train.txt,同时写入其实标签

    #!/usr/bin/env sh

    DATA=data/re/

    MY=examples/myfile

    echo "Create train.txt..."

    rm -rf $MY/train.txt

    for i in 3 4 5 6 7

    do

    find $DATA/train -name $i*.jpg | cut -d '/' -f4-5 | sed "s/$/ $i/">>$MY/train.txt

    done

    注意:如果要对变量进行+-操作,必须两层括号,如:$(( i-2 ))

  • 相关阅读:
    反悔贪心 学习笔记
    「CF901C」Bipartite Segments 题解
    「HEOI2015」公约数数列 题解
    拓展欧拉定理
    莫比乌斯反演题目选做
    八月水题录
    chapt15、使用虚拟内存
    chapt16、线程堆栈
    chapt14、探索虚拟内存
    get files version by vbs
  • 原文地址:https://www.cnblogs.com/fariver/p/6165947.html
Copyright © 2020-2023  润新知