实用命令与文本处理

实用命令

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 ))

posted @ 2016-12-12 20:53  fariver  阅读(244)  评论(0编辑  收藏  举报