关于shell-----2

来源:互联网 发布:小米手环2清除数据 编辑:程序博客网 时间:2024/06/10 17:16
xargs 可以把stdin接收到的数据重新格式化,再将去作为参数提供给其他命令
例如: cat file.txt #样例文件
1 2 3 4 5 6
7 8 9 10
11 12
cat file.txt | xargs
1 2 3 4 5 6 7 8 9 10 11 12
cat file.txt |xargs -n 3
1 2 3
4 5 6
7 8 9
10 11 12
echo "splitXsplitXsplitXsplit" |xargs -d X
输出的结果: split split split split
-d 选项为输入指定一个定界符:简单说就是忽略X

cat args.txt | xargs -I {} ./cecho.sh -p {} -l   |cecho.sh里面的内容为:
输出的结果为: -p arg1 -l                        |                      arg1
                          -p arg2 -l                        |                      arg2
                          -p arg3 -l                        |                      arg3
   
find . -type f -name "*.c" -print0 |xargs -0 rm -f 利用find寻找出所有c文件,忽略了带空格的文件名,并且删除掉
find . -type f -name "*.c" -print0 |xargs -0 wc -l 利用find寻找出所有c文件,忽略了带有空格的文件名,并且统计了行数
cat files.txt | (while read arg; do cat $arg; done)等同于
cat files.txt | xargs -I {} cat {}
用tr进行转换
echo "HELL WORLD" |tr 'a-z' 'A-Z' 小写转换为大写
用tr进行删除
echo "hello 789 world 456" |tr -d '0-9'
用tr进行补集
--------------------------------------------
|-------------------------------------------------------------------------------------------------------------------------|
用tr来省略文本中的空格:cat filesname.txt |tr -s                   
对某个文件里面的数据进行求和:cat filesname.txt | echo $[ $(tr '\n' '+')0] 
运算的结果为15 后面的0是为了省略多出来的运算符      
cat filesname.txt |tr -s '\n'                                
输出的结果为:123456        

filesname.txt里面的数据为 :   1
                                                 2
                                                 3
                                                 4
                                                 5
                                                 6
tr的字符类:alnum:字母和数字
                    alpha:字母
                    cntrl:控制(非打印)
                    digit:数字
                    graph:图形字符
                    lower:小心字母
                    print:可打印字符
                    punct:标点符号
                    space:空白字符
                    upper:大写字母
                    xdigit:十六进制字符
可以按照下面的方式选择并使用所需的字符串:
   tr [:class:] [:class:]
  例如:
   tr '[:lower:]' '[:upper:]'

排序、唯一和重复
sort命令既可以从特定的文件,也可以从stdin中获取输入,并将输出写入stdout。uniq的工作方式和sort一样
sort file1.txt file2.txt >sorted.txt 或者是sort file1.txt file2.txt -o sorted.txt -------这两条命令都可以对file1和file2进行排序
sort -n file.txt ------按照顺序进行排序
sort -r file.txt ------按照逆序进行排序
sort -M file.txt ------按照月份进行排序
sort -m file1.txt file2.txt  -----------合并两个已经排序过的文件
sort file1.txt file2.txt |uniq ---------寻找已排序文件中不重复的行
sort -C file.txt ------检查是否已经排序过了
sort关于其他的参数: -k  :指定了排序应该按照哪一个键(key)来进行,键指的是列好
         -b  :该选项是用于忽略文件中的前导空白行
         -d  :用于指明以字典序进行排序
uniq:主要是用来消除重复内容例如:
        uniq sorted.txt 或者是sort sorted.txt | uniq 或者是cat sorted.txt | uniq
    如果只显示唯一的行(在输入文件中没有重复出现的行)例如:
                  uniq -u sorted.txt 或者是sort sorted.txt|uniq -u 或者是cat sorted.txt |uniq -u
    如果是要统计各行在文件中出现的次数 例如:
                  uniq -c sorted.txt 或者是sort sorted.txt|uniq -c 或者是cat sorted.txt |uniq -c
    如果是要找出重复的行 例如:
                  uniq -d sorted.txt 或者是sort sorted.txt|uniq -d 或者是cat sorted.txt |uniq -d
    同时我们也可以指定键:-s ,-w   -s:指定可以跳过前n个字符    -w:指定用于比较的最大字符数
    
创建临时文件、目录、或着文件名  创建临时文件、目录、或着文件名的作用是,编写shell脚本的时候我们经常要储存一些临时数据,最适合的储存点是/tmp,但是重启会清空所以
        例如:创建临时文件:filename=`mktemp`
           创建临时目录:dirname=`mktemp -d`
           创建文件名,但是不创建实际的文件或目录: tmpfile=`mktmp -u`
           根据模板创建临时文件:mktemp test.xxx     注意:要想正常工作必须保证有三个x,x会被随机的字符(字母或者数字)替换
分割文件或者数据    作用:提高可读性、生成日志、用过E-mail发送文件等
          split -b 10k data.file    ------将data.file 这个文件分割为多个大小为10k的文件除了k外还可以用 M、G、c、w
    如果是要指定分割的文件名:split -b 10k data.file -d -a 4 split_file      -d是指以数字为后缀-a为指定后缀的长度split_file指的是生成头文件名为split_file的文件
    
    如果是要以行来分割就 :split -l 10 data.file      以每10行进行分割
split的进化工具:csplit ---该工具可以根据文本自身的特点进行分割,是否存在某个单词或文本内容都可以作为分割文件的条件,具体的内容请看下一章
原创粉丝点击