linux积累

vim

编辑

1
2
3
4
v 选中
j k ctr+d ctr+u ctr+f ctr+b
vim -b $fileName(二进制打开文件)可看到^M :%s/\r//g 替换命令替换
u 在命令行模式下是撤销操作

替换

1 2 3 4 5 6 7 8 9 9,%s/cur7/cur6/g 从第9行开始替换 :%s/cur7/cur6/g :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky n 为数字,若 n 为 .,表示从当前行开始到最后一行: :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky :%s/vivian/sky/(等同于 :g/vivian/s/sky/) 替换每一行的第一个 vivian 为 sky :%s/vivian/sky/g(等同于 :g/vivian/s/sky/g) 替换每一行中所有 vivian 为 sky

转义:可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

1 2 :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/ :%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/

awk

1 2 3 4 awk [-F field-separator] 'commands' input-file(s) 其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。 通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

以 ‘,’ 为分隔符,统计$3的计数数据:

1 ``` awk -F ‘,’ ‘{arr[$3]+=1}END{for(i in arr)print i,arr[i]}’ temp1

计算最大最小平均值:

1 2 3 4 5 awk '{arr[$1]++}END{for(i in arr) { if(arr[i]>=50) print i,arr[i]; fi}}' awk '{sum+=$1} END {print "Sum = ", sum}' awk '{sum+=$1} END {print "Average = ", sum/NR}' awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}' awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'

执行sql

1 2 3 4 5 6 db_r="mysql -h $dbhost -udev -$pwd -e" ret=`$db_r"$sql" --skip-column-name` for id in $ret do echo $id done

函数

1 2 3 4 5 function f(){ echo a } f 0 CLICK today_click_c=$?

函数返回值在调用该函数后通过$? 来获得。

注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

if

判断文件是否存在

1 2 3 if [ ! -f "$PATH" ];then rm /home/jun.yu/earningMoney/d1/*$delday* fi
1 2 3 ``` if [ `ls -l $path*/

判断字符串是否为空

1 2 3 if [ ! -z "$PATH" ];then PATH="/home/jun.yu/earningMoney/d1/*$delday*" fi

循环

1 2 3 4 for i in $(seq 0 3) do echo "adsource:"$i done