linux shell 随笔

linux shell 随笔


diff,rsync

diff会对每个文件中的每一行都做比较,所以文件较多或者文件较大的时候会非常慢。
sort进行排序
rsync数据同步

run:

#my shell
ls -la  n1|sort
ls -la  n2|sort
find n1 -printf "%P\n" | sort > file1
find n2 -printf "%P\n" | sort | diff file1 -

result:
>
./a.sh
drwxrwxr-x 2 zz zz 4096 Jun 7 18:16 .
drwxrwxr-x 4 zz zz 4096 Jun 7 21:27 ..
-rw-rw-r– 1 zz zz 1069645 Jun 7 18:16 Python.docx
-rw-rw-r– 1 zz zz 1563846 Jun 7 18:16 xxLinux server.docx
-rwxrw-r– 1 zz zz 14168 Jun 7 18:16 Linux shell总结.docx
-rwxrw-r– 1 zz zz 18588 Jun 7 18:16 鸟哥的Linux私房菜.docx
-rwxrw-r– 1 zz zz 246381 Jun 7 18:16 鸟哥的Linux私房菜.pdf
-rwxrw-r– 1 zz zz 2482257 Jun 7 18:16 Linux server.docx
-rwxrw-r– 1 zz zz 3191299 Jun 7 18:16 linux_server.zip
-rwxrw-r– 1 zz zz 3355734 Jun 7 18:16 qt5_summary.zip
-rwxrw-r– 1 zz zz 3879281 Jun 7 18:16 qt blog.zip
-rwxrw-r– 1 zz zz 452501 Jun 7 18:16 Qt 模块讲解.zip
-rwxrw-r– 1 zz zz 609470 Jun 7 18:16 c++ primer.pdf
-rwxrw-r– 1 zz zz 767165 Jun 7 18:16 Linux server.pdf
-rwxrw-r– 1 zz zz 78653 Jun 7 18:16 c++ primer.docx
total 17356
drwxrwxr-x 2 zz zz 4096 Jun 7 18:21 .
drwxrwxr-x 4 zz zz 4096 Jun 7 21:27 ..
-rw-rw-r– 1 zz zz 1069645 Jun 7 18:16 Python.docx
-rw-rw-r– 1 zz zz 1563846 Jun 7 18:16 xxLinux server.docx
-rwxrw-r– 1 zz zz 14168 Jun 7 18:16 Linux shell总结.docx
-rwxrw-r– 1 zz zz 2482257 Jun 7 18:16 Linux server.docx
-rwxrw-r– 1 zz zz 3191299 Jun 7 18:16 linux_server.zip
-rwxrw-r– 1 zz zz 3355734 Jun 7 18:16 qt5_summary.zip
-rwxrw-r– 1 zz zz 3879281 Jun 7 18:16 qt blog.zip
-rwxrw-r– 1 zz zz 452501 Jun 7 18:16 Qt 模块讲解.zip
-rwxrw-r– 1 zz zz 609470 Jun 7 18:16 c++ primer.pdf
-rwxrw-r– 1 zz zz 767165 Jun 7 18:16 Linux server.pdf
-rwxrw-r– 1 zz zz 78653 Jun 7 18:16 c++ primer.docx
total 17092
13,14d12
< 鸟哥的Linux私房菜.docx
< 鸟哥的Linux私房菜.pdf

*如果不想使用-printf,那么先进入各目录再find也行。

*将命令放进括号中执行是为了在子shell中切换目录,不用影响当前所在目录。(cd /home/zz) 下一句shell目录不变

sed


-e 可以执行多个正则
        -p 打印出来
        -n 显示script处理后的结果
        -V 版本
sed命令
        a\ 在当前行下面插入文本。
        i\ 在当前行上面插入文本。
        c\ 把选定的行改为新的文本。
        d 删除,删除选择的行。
        D 删除模板块的第一行。
        s 替换指定字符
        g 获得内存缓冲区的内容,并替代当前模板块中的文本。
        n 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
        p 打印模板块的行。
        r file 从file中读行。
        w file 写并追加模板块到file末尾。  
        W file 写并追加模板块的第一行到file末尾。
        = 打印当前行号码。
        \1 子串匹配标记
        & 已匹配字符串标记
sed元字符集
        ^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
        $ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
        . 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
        * 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
        [] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。  
        [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
        \(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
        & 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
        \< 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。
        \> 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
        x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
        x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
        x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。

cat file1
c++ primer.docx
c++ primer.pdf
Linux server.docx
Linux server.pdf
linux_server.zip
Linux shell总结.docx
Python.docx
qt5_summary.zip
qt blog.zip
Qt 模块讲解.zip
xxLinux server.docx
鸟哥的Linux私房菜.docx
鸟哥的Linux私房菜.pdf

sed -n 's/c++/c/p' file1#将file1中c++替换成c,-n,p只是输出变换的行
sed 's/c++/c/g' file1 #行所有的c++变成c
sed 's/c++/c/2g' file1 #行从第二个开始的c++变成c
sed  '/^$/d' file1  #删除所有的空行
sed '2d' file1      #删除文件第二行
sed '2,$d' file1
sed '/^c++/' d file1    #删除c++开头的行
sed 's/c++/[&]/g' file1 #将成c++变成[c++]
sed  's/\(c++\) \([a-Z]*.\)\(docx\)/\3 \2 \1/' file1#将c++和docx的位置对换
sed "s/$var/nihao" file
sed -n '/c++/,/Linux/p' file1#打印c++和Linux之间的行
sed  -n '1,/^Linux/p' file1#打印1到Linux的行
sed -n '/c++/,/Linux/s/$/nihao/p' file1
sed -e '1,5d' -e 's/test/check/' file
sed '/test/r file' file1
sed -n '/test/w file' example
sed '/^test/a\this is a test line' file#行下追加
sed '/^test/i\this is a test line' file#行上追加
sed -n 'p;n' test.txt  #奇数行

日期

check_leap()
{
Y=`expr substr $1 1 4`
r1=`expr $Y % 4`
r2=`expr $Y % 100`:
r3=`expr $Y % 400`
if [ $r1 -eq 0 -a $r2 -ne 0 -o $r3 -eq 0 ]
then
FRUN="true"
else
FRUN="false"
fi
echo $FRUN
}
#----------------------------------------------------------------- 
# 获取月份最大日期 

#方法1 
get_mon_days() 
{ 
Y=`expr substr $1 1 4` 
M=`expr substr $1 5 2` 
case "$M" in
01|03|05|07|08|10|12) days=31;; 
04|06|09|11) days=30;; 
02) 
_tmpStr=`check_leap "$Y"` #判断是否闰年 
if [ "$_tmpStr" = "true" ] ; then
#闰年 
days=29 
else
days=28 
fi
;; 
*) 
days=0 
;; 
esac 
echo $days 
} 
#--

定时器crontab


文件/etc/crontab
-e:编辑该用户的计时器设置;
-l:列出该用户的计时器设置;
-r:删除该用户的计时器设置;
-u<用户名称>:指定要设定计时器的用户名称。
minute hour day month week command 顺序:分 时 日 月 周

3,15 * * * * command//第三和15分钟执行一次
3,15 8-11 * * * command//811小时的第315分钟执行
3,15 8-11 */2 * * command//隔两天

猜你喜欢

转载自blog.csdn.net/qq_33564134/article/details/80631003
今日推荐