见贤思小齐,知足常乐呵

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. awk

awk -F ',' '{print $NF, $(NF-1)}'        ##F 是field

2. sed 's/a1/a2/g'

1) 批量替换多个文件中的字符串命令如下:sed -i “s/原字符串/新字符串/g” `grep 原字符串 -rl 所在目录`

例如:我要把 charset=gb2312 替换为 charset=UTF-8

sed -i “s/charset=gb2312/charset=UTF-8/g” ‘grep charset=gb2312 -rl /www’  

解释一下:

-i 表示inplace edit,就地修改文件

-r 表示搜索子目录

-l 表示输出匹配的文件名

这个命令组合很强大,要注意备份文件。

例2

数据 test1.TXT: 541187434656[\002]真彩钢笔FP6328学生

要求更换分隔符:  把[\002] 替换为 |

cat test1.TXT| sed "s/002]//g" |sed "s/\[//g" |sed "s/\\\/|/g" 

1st sed: 把 002] 替换为空

2nd sed:把[ 替换为空,需要对[转义  \[

3rd sed: 把\ 替换为 |, 需要两个反斜杠转义 \\\ 

2) 去掉文件中的所有空格

3. wc -l

4. regexp_extract

5. 压缩与解压

tar -zvcf .tar.gz   /   tar -ztvf

gzip                  /    gunzip 

zcat 压缩包 可以阅读压缩包

6. 删除

rm -r part\=2016-08-23/     r 递归   特殊字符加上\转义

rm -v                                 v 显示删除内容

rm -rf  强制删除文件夹及其内容

cp -R 可以复制整个文件夹

mv 可以重命名文件

 

7. 查看磁盘使用情况 

df -lh

 

8. 获得一个路径下面的文件夹名

ls –l $path|awk ‘/^d/ {print $NF}’

 

#获得一个路径下面的文件名

1)  不包含路径

ls –l $path|awk ‘/^-/ {print $NF}’

2)  包含路径

find $path –name “*.*”

 

find $path   ## 输出file和folder(包含路径)

9. 变量和数值加减

I=$((NUM+1))

I=`expr $NUM +1`

10. 读取文件除第一行之外的记录

ls –l|sed ‘1d’

11. 取字符串变量的第几位的值

var=’abcder’

a=${var:0:1}  --a

b=${var:1:2}  --bc

c=${var:1:1}  --b

12. 查看后台任务,kill

ps -au 

ps -ef 查看 nohup的后台任务

 

kill -9 pid 杀死某个进程id

13. ulimit / error: too many open files

max open files 查看 ulimit -n,机器一般缺省默认为1024

当作负载较大的服务器时,很容易遇到error: too many open files。因此,需要将其改大。

改大方式:

1)ulimit -SHn 65535 等效于 ulimit -n 65535,这是即时修改方式,重启后失效。

2)在/etc/rc.local 中增加一行 ulimit -SHn 65535
3)在/etc/profile 中增加一行 ulimit -SHn 65535
4)在/etc/security/limits.conf最后增加如下两行记录
    * soft nofile 65535
    * hard nofile 65535

14 退出命令:

     退出ssh: exit

     退出mysql:quit

     退出虚拟机:deactivate

 

15 日志

log_file="/root/BI_scripts/logs"/"$TODAY".log
exec 1>>$log_file
exec 2>>$log_file

1是成功日志,2是失败日志

16 输出空格

echo -e '\n'

 

17 当前日期与时间

 #当前时间
    local curtime;
    curtime=`date +"%Y-%m-%d %H:%M:%S"`

 #当前日期
    TODAY=$(date +%Y%m%d) 
endTime=$(date +%s)
endDateTime=$(date -d @$endTime)
diff=$(($endTime-$startTime))

echo "Step2: 存储执行完成: $endDateTime"
echo "耗时: $(($diff / 60)) minutes and $(($diff % 60)) seconds."

18 crontab

crontab -e

crontab -l

定时任务格式

#30 6 * * *   nohup sh /data/admin/adsprecise/sources/transfers.sh tb_plan_click &

19. 保存日志

#添加日志文件 auto_deploy.log 目录是test/logs/
date=$(date +%Y%m%d)
log_file="logs/auto_deploy_"$date".log"

echo
echo 'Executing... Pls check process details in log file test/logs/auto_deploy.log'
exec > $log_file 2>&1

20. 判断是否存在

1) 判断入参是否存在

#判断输入参数是否齐全
#参数1
if [ $1 ] && [ $2 ] && [ $3 ]
then
      sql_folder=$1 && echo "参数1 ready:"$sql_folder
      hospital=$2 && echo "参数2 ready:"$hospital
      state=$3 && echo "参数3 ready:"$state
else
   echo -e "Error:参数缺失,请提供入参,重新执行!\n需要3个参数:脚本目录、指定医院(zr\xw\other)、是否启用细指标(1关闭 2开启)"
fi

2)判断文件是否存在

if [[ -f objects.txt ]]
then
        rm -f objects.txt
fi 

3) 判断文件夹是否存在

#判断是否存在相应文件夹
if [ ! -d "$version" ]; then
        mkdir $version && echo "文件夹${version}创建ok."
else
   rm -rf $version && mkdir $version && echo "文件夹${version}重新创建ok."
fi

21. if else 语句

  • 括号前后必须有空格
  • 注意单括号和双括号的问题
if [[ $part == "ind" ]] #如果是变量,也可以双括号[[ 不需要双引号
then 
    echo "right1" 
elif [ "$part" == "VTE" ] #如果是变量,单括号[ + 双引号 
then 
    echo "right2" 
elif [ 1 == 1 ] #如果是常量,可以用单括号[
then 
    echo "right3" 
else 
    echo "end" 
fi

 22. vi撤销编辑

撤销操作:u

恢复操作:ctrl+r

  

  

 

  

 

posted on 2016-08-25 12:47  Suckseedeva  阅读(310)  评论(0编辑  收藏  举报