shell学习笔记

1、合并一个文件夹下多个文件内容

find -name "*.log" -exec 'cat' {} \; > test.tmp
2、批量删进程

ps aux|grep '/usr/local/bin/php'|xargs kill -9

3、 x="asdgsd";y="x";eval "a=\${$y}" ;echo $a

4.查找重复次数

cat readme.txt|awk -F" " '{print $1}'|sort|uniq -c > readme1.txt

5.合并字符串

cat readme.txt |grep '^b '|awk -F" " '{print $2}' |paste -d"," -s

a=`cat readme.txt |grep '^b '|awk -F" " '{print $2}' |paste -d"," -s`

cat readme1.txt |awk -F" " '{if($1 > 1){print $2}}' > reademe2.txt;

6.十进制转16进制

echo "ibase=10;obase=16;10" | bc |tr '[A-Z]' '[a-z]';

7.找字符串

echo "sadg232asdg" |awk -F"[0-9]+" '{print substr($0, length($1)+1, length($2)-1)}';

8.md5

echo 123|tr -d '\n'|md5sum

9.

find ./ -name "*.php"|awk '{print "php -l "$1}'|sh|grep -v "No syntax errors"

10.

echo 'hasdgsdgsad23235dw555343sadgsdwe' |grep -o -E "[0-9]{1,9}"

11.

find -name *.log |xargs rm -rf {} \;

du -h --max-depth=1


12杀进程

ps aux|grep grass |awk '{printf $2" ";}'|xargs kill {} \;


13 字符串替换

$x = "sadgsdg";

echo ${x/d/$+}


14截取某值

readme.txt :

15:35:32.581 [New I/O server worker #2-2] DEBUG c.s.c.c.s.s.SamplingDevic eMessageServerHandler - ChannelId : 2049815843

awk '/ChannelId/{print $NF}' readme.txt

结果:2049815843



15查找指定文件内容

find ./ -name "*.php" | xargs grep -rl "school"


16查找指定文件内容并打印

find ./ -name '*.php' -exec grep -i school {} \;



find . -type f -exec grep 'mingtian' -l {} \;


寻找空的目录:

find /path -depth -type d -empty

寻找空文件:

find /path -depth -type f -empty

查找删除的文件:

find /path -name mytestfile | xargs rm


http://teethgrinder.co.uk/open-flash-chart/index.php


16.查相关字符出现次数

netstat -anpl|awk '{print $1}'|sort|uniq -c


17.获取服务器IP地址

/sbin/ifconfig | grep "inet addr"|awk '{print $2}' | awk -F":" '{print $2}' |head -1


18、curl -s$URL|perl-nle"print for m{http://[^\"]+(?:jpg|png|gif)}g;"|sort-u|xargswget


  • 通过sort/uniq获取文件内容的交集、合集和不同之处:假设有a、b两个文本文件,文件本身已经去除了重复内容。下面是效率最高的方法,可以处理任何体积的文件,甚至几个G的文件。(Sort对内存没有要求,但也许你需要用 -T 参数。)可以试着比较一下,你可以看看如果用Java来处理磁盘上文件的合并,需要用多少行代码。

cat a b | sort | uniq > c # c 是a和b的合集

cat a b | sort | uniq -d > c # c 是a和b的交集

cat a b b | sort | uniq -u > c # c 是a和b的不同

  • 汇总一个文本内容里第三列数字的和(这个方法要比用Python来做快3倍并只需1/3的代码量):

awk ‘{ x += $3 } END { print x }’ myfile

  • 如果你想查看一个目录树里的文件的体积和修改日期,用下面的方法,相当于你挨个目录做”ls -l”,而且输出的形式比你用”ls -lR”更可读:

find . -type f -ls

  • 使用xargs命令。这个命令非常的强大。注意每行上你可以控制多少个东西的执行。如果你不确定它是正确的执行,先使用xargs echo。同样,-I{} 也非常有用。例子:

find . -name \*.py | xargs grep some_function

cat hosts | xargs -I{} ssh root@{} hostname

  • 假设你有一个文本文件,比如一个web服务器日志,在某些行上有一些值,比如URL中的acct_id参数。如果你想统计每个acct_id的所有请求记录:

cat acces

#!/bin/sh
du $1 --max-depth=1 | sort -n|awk '{printf "%7.2fM ----> %s\n",$1/1024,$2}'|sed 's:/.*/\([^/]\{1,\}\)$:\1:g'



-Tip16 如何查找某条命令的相关库文件

在Linux环境下通过ldd命令即可实现,在控制台执行:
ldd /bin/ls
即可得到/bin/ls命令的相关库文件列表.

-Tip17 只列子目录(文件)

ls -F | grep /$

你也可以在.bashrc(针对bash)中把该命令作成alias,以后只要敲入sub就可以实现只列子目录的功能.

  alias sub = “ls -F | grep /$”

同样,ls -l | grep ^-则是只列普通文件.


20、查文件夹大小

du ./ --max-depth=1

if mkdir /var/lock/mylock 2>/dev/null; then
  ...
  rm -rf /var/lock/mylock
fi



21、大文件查询指定行内容


sed -n '616220,616237p' /tmp/aaa_201309.log
cat /tmp/aaaa_201309.log |grep -n 131541514512412412


本文出自 “心涯” 博客,谢绝转载!

你可能感兴趣的:(shell)