人若无名,便可专心练剑

 paste 标签

linux shell 之 字符处理命令 二

  |   0 评论   |   3,117 浏览

1,tr 命令

哈哈,tr???table里边的tr吗,:-) 想多了,不够就是处理行的哦

tr:tr 可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换!

使用方法:

用法:tr [选项]... SET1 [SET2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

  -c, -C, --complement		首先补足SET1
  -d, --delete			删除匹配SET1 的内容,并不作替换
  -s, --squeeze-repeats	如果匹配于SET1 的字符在输入序列中存在连续的
				重复,在替换时会被统一缩为一个字符的长度
  -t, --truncate-set1		先将SET1 的长度截为和SET2 相等
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

SET 是一组字符串,一般都可按照字面含义理解。解析序列如下:

  \NNN	八进制值为NNN 的字符(1 至3 个数位)
  \\		反斜杠
  \a		终端鸣响
  \b		退格
  \f		换页
  \n		换行
  \r		回车
  \t		水平制表符
  \v		垂直制表符
  字符1-字符2	从字符1 到字符2 的升序递增过程中经历的所有字符
  [字符*]	在SET2 中适用,指定字符会被连续复制直到吻合设置1 的长度
  [字符*次数]	对字符执行指定次数的复制,若次数以 0 开头则被视为八进制数
  [:alnum:]	所有的字母和数字
  [:alpha:]	所有的字母
  [:blank:]	所有呈水平排列的空白字符
  [:cntrl:]	所有的控制字符
  [:digit:]	所有的数字
  [:graph:]	所有的可打印字符,不包括空格
  [:lower:]	所有的小写字母
  [:print:]	所有的可打印字符,包括空格
  [:punct:]	所有的标点字符
  [:space:]	所有呈水平或垂直排列的空白字符
  [:upper:]	所有的大写字母
  [:xdigit:]	所有的十六进制数
  [=字符=]	所有和指定字符相等的字符

仅在SET1 和SET2 都给出,同时没有-d 选项的时候才会进行替换。
仅在替换时才可能用到-t 选项。如果需要SET2 将被通过在末尾添加原来的末字符的方式
补充到同SET1 等长。SET2 中多余的字符将被省略。只有[:lower:] 和[:upper:]
以升序展开字符;在用于替换时的SET2 中以成对表示大小写转换。-s 作用于SET1,既不
替换也不删除,否则在替换或展开后使用SET2 缩减。
例子:将内容由小写转为大写
root@c2y2:/home/exp/vodxunlei/source# cat 1.txt |head -2
1410cf3882936ef6717bef14db891d8f4e6a887e449
141f5a588b071d85924bbf82bcf1cc875f905eebd8e
root@c2y2:/home/exp/vodxunlei/source# cat 1.txt |head -2|tr "[:lower:]" "[:upper:]"
1410CF3882936EF6717BEF14DB891D8F4E6A887E449
141F5A588B071D85924BBF82BCF1CC875F905EEBD8E
root@c2y2:/home/exp/vodxunlei/source# 
2,join 命令

join:针对每一对具有相同内容的输入行,整合为一行写到标准输出

用法:

用法:join [选项]... 文件1 文件2
针对每一对具有相同内容的输入行,整合为一行写到标准输出,
默认的内容连接区块是由第一个空白符代表的分界符号。当文件1
或文件2 都被指定为"-"时,程序将从标准输入读取数据。

  -a  文件编号    	文件编号的值可以是1 或2,分别对应文件1 和 文件2。
                      	此选项用于根据指定文件编号输出不成对的行目。
  -e 字符    		将缺失的输入区块替换为指定字符
  -i, --ignore-case 	比较时忽略大小写
  -j 域 		等于"-1 域 -2 域"
  -o 格式 		按照指定格式构造输出行
  -t 字符 		使用指定字符作为输入和输出的分隔符
  -v 文件编号        	类似 -a 文件编号,但禁止组合输出行
  -1 域          	在文件1 的此域组合
  -2 域          	在文件2 的此域组合
  --check-order     	检查输入行是否正确排序,即使所有输入行均是成对的
  --nocheck-order   	不检查输入是否正确排序
  --header          	将首行视作域的头部,直接输出而不对其进行匹配
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

除非使用了"-t 字符串" 选项,否则前导空格分隔的域将被忽略,如果指定了字符串,
则使用指定字符串分隔任意的域并从1 开始计数的域编号。可以指定的格式是由一个
或多个逗号活空格所分隔的描述,其形式为"文件编号.域"或者"0"。默认的
格式输出合并后的域、文件1 和文件2 剩下的域,均由该指定字符串分隔。

重要提示:文件1 和文件2 必须在合并域中排序。
例如,如果"join"后没有选项,使用"sort -k 1b,1"。
注意,所进行的比较遵从"LC_COLLATE"所指定的的规则。
如果输入没有被排序并导致某些行无法合并,将会显示警告信息。

例子:

root@c2y2:/home/exp/vodxunlei/source# cat /etc/passwd|head -2 > passwd
root@c2y2:/home/exp/vodxunlei/source# cat /etc/shadow|head -2 > shadow
root@c2y2:/home/exp/vodxunlei/source# cat passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
root@c2y2:/home/exp/vodxunlei/source# cat shadow 
root:$6$CsRWrpeV$b0Kmabhimd69oV46/MbsL64HNQMoZnh3g6lWu/Z5YKFsp20btmt4YGG/GEB4kVoIt.mKmZzcX0LbEcljuo90.:15912:0:99999:7:::
daemon:*:15820:0:99999:7:::
root@c2y2:/home/exp/vodxunlei/source# join -t ":" passwd shadow 
root:x:0:0:root:/root:/bin/bash:$6$CsRWrpeV$b0Kmabhimd69oV46/MbsL64HNQMoZnh3g6lWu/Z5YKFsp20btmt4YGG/GEB4kVoIt.mKmZzcX0LbEcljuo90.:15912:0:99999:7::: daemon:x:1:1:daemon:/usr/sbin:/bin/sh:*:15820:0:99999:7:::

3,paste

pase:将每个文件的同行粘贴在一起

用法:


用法:paste [选项]... [文件]...
将每个指定文件里的每一行整合到对应一行里写到标准输出,之间用制表符分隔。
如果没有指定文件,或指定文件为"-",程序将从标准输入读取数据。

长选项必须使用的参数对于短选项时也是必需使用的。
  -d, --delimiters=列表	改用指定列表里的字符替代制表分隔符
  -s, --serial		不使用平行的行目输出模式,而是每个文件占用一行
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出
例子:
root@c2y2:/home/exp/vodxunlei/source# paste passwd shadow 
root:x:0:0:root:/root:/bin/bash	root:$6$CsRWrpeV$b0Kmabhimd69oV46/MbsL64HNQMoZnh3g6lWu/Z5YKFsp20btmt4YGG/GEB4kVoIt.mKmZzcX0LbEcljuo90.:15912:0:99999:7::: daemon:x:1:1:daemon:/usr/sbin:/bin/sh	daemon:*:15820:0:99999:7:::

4,split分割命令

split:对文件进行切割,很使用,特别是有的文本特别大时,如大日字文件

用法:


用法:split [选项]... [输入 [前缀]]
将输入内容拆分为固定大小的分片并输出到"前缀aa"、"前缀ab",...;
默认以 1000 行为拆分单位,默认前缀为"x"。如果不指定文件,或
者文件为"-",则从标准输入读取数据。

长选项必须使用的参数对于短选项时也是必需使用的。
  -a, --suffix-length=N   use suffixes of length N (default 2)
  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE   put at most SIZE bytes of lines per output file
  -d, --numeric-suffixes  use numeric suffixes instead of alphabetic
  -e, --elide-empty-files  do not generate empty output files with `-n'
      --filter=COMMAND    write to shell COMMAND; file name is $FILE
  -l, --lines=NUMBER      put NUMBER lines per output file
  -n, --number=CHUNKS     generate CHUNKS output files.  See below
  -u, --unbuffered        immediately copy input to output with `-n r/...'
      --verbose		在每个输出文件打开前输出文件特征
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

SIZE 可以是一个可选的整数,后面跟着以下单位中的一个:
KB 1000,K 1024,MB 1000*1000,M 1024*1024,还有 G、T、P、E、Z、Y。

块数可能为:
N	基于输入的大小分割为N 个文件
K/N	将N 个文件中的第K 个输出到标准输出
l/N	分割为N 个文件,但分割时不切断行
l/K/N	将N 个文件中的第K 个输出到标准输出,但分割时不切断行
r/N	类似l 但使用轮询分配
r/K/N	类似r/N 但尽将N 个文件中的第K 个输出到标准输出
例子:拆分图片,并合并图片哈,合并后的完全能用哦。


root@c2y2:/home/exp/Pictures/temp# ls -al
总用量 2336
drwxr-xr-x 2 root root    4096  3月 28 00:44 .
drwxr-xr-x 3 exp  exp     4096  3月 28 00:44 ..
-rw------- 1 root root 2382720  3月 28 00:44 download.png
root@c2y2:/home/exp/Pictures/temp# split -b 1000k download.png download.png 
root@c2y2:/home/exp/Pictures/temp# ls
download.png  download.pngaa  download.pngab  download.pngac
root@c2y2:/home/exp/Pictures/temp# ls -al
总用量 4664
drwxr-xr-x 2 root root    4096  3月 28 00:44 .
drwxr-xr-x 3 exp  exp     4096  3月 28 00:44 ..
-rw------- 1 root root 2382720  3月 28 00:44 download.png
-rw-r--r-- 1 root root 1024000  3月 28 00:44 download.pngaa
-rw-r--r-- 1 root root 1024000  3月 28 00:44 download.pngab
-rw-r--r-- 1 root root  334720  3月 28 00:44 download.pngac
root@c2y2:/home/exp/Pictures/temp# rm download.png -rf
root@c2y2:/home/exp/Pictures/temp# cat download.pngaa download.pngab download.pngac > download.png
5,-管线命令

-:将其作为前一个的标准输出,并作为后面一个命令的标准输入

例子:我将 /home 里面的档案给他打包,但打包的数据不是纪录到档案,而是传送到 stdout; 经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf - 

tar -cvf - /home | tar -xvf -

后记::-),一天一天多一点。。。。