tr

tr可以对来自标准输入的内容进行字符替换,字符删除,重复字符压缩。tr只能通过stdin接受输入,调用格式为tr [options] set1 set2

tr将输入中的字符由大写转换成小写,以及字符映射

 FIGHTING...echo "hello world" | tr 'a-z' 'A-Z'
HELLO WORLD
 FIGHTING...echo "hello 123456 | tr '0-9' '9876543210'
876543

tr删除字符

 FIGHTING...echo "hello 123 world " | tr -d '0-9'
hello  world 

字符组补集

 FIGHTING...echo "hello 1 word 2 next 3" | tr -d -c '0-9 \n'
 1  2  3
 FIGHTING...echo "hello 1 word 2 next 3" | tr -c '0-9' ' '
      1      2      3  

字符压缩

 FIGHTING...echo "hello    world     my    tttt" |tr -s ' '
hello world my tttt

校验和与核实

校验和程序用来从文件中生成相对较小的唯一密钥,我们可以通过重新计算该密钥,来减产文件是否在发生改变

可以使用md5sum filename , md5sum是一个长度为32个字符的十六进制串,我们可以将其重定向到一个文件,然后再用来核实文件是否发生变化。当然也可以用于目录中。

 FIGHTING...md5sum md5sum LOG.TXT  > logmd5sum.md5
 FIGHTING...md5sum -c logmd5sum.md5 
LOG.TXT: OK
 FIGHTING...

行排序

sort命令能够对文本文件和stdin进行排序,可以配合其他命令来生成所需要的输出。uniq经常与sort一同使用,提取不重复的行。

 FIGHTING...sort test.txt test2.txt > test3.txt
 FIGHTING...cat test3.txt





		
123
123
456
456
789
999
hello world 
		-name : liudong
toady is a fine day.

按照是数字排序(-n) 逆序排列 -r   按照月份排列 -M,合并已经排序过的文件 -m,

 FIGHTING...sort -n test2.txt





123
123
456
456
789
999

找出已经排序文件中不重复的行:

 FIGHTING...cat test2.txt
123


456


789
123
456

999
 FIGHTING...sort test2.txt |uniq

123
456
789
999
 FIGHTING...

按照列或者键来排序,-k指定排序所依据的字符,注意:按数字顺序排序和按字母表顺序排序所处理的方式不同,如果要采用按数字顺序排序,就应该明确给出-n选项。

 FIGHTING...sort -nrk 1 test2.txt
999
789
456
456
123
123

uniq

uniq从给定输入中找出唯一的行,只能用作排序的数据,因此uniq通常与sort命令结合。

 FIGHTING...sort test2.txt | uniq

123
456
789
999
 FIGHTING...

分割文件和数据

split命名可以用来分割文件,命令接受文件名作为参数,然后创建一系列体积更小的文件,分割的内容依据字母顺序一次排序

分割单位有K(KB),M(MB),G(GB),C(byte),W(word).新文件以xab,xac,xad...命令split默认使用字母后缀,如果想使用数字,可以使用-d

 FIGHTING...split -b 10k output.session
 FIGHTING...ls
3               xci  xfe  xia  xkw  xns  xqo  xtk  xwg    xzaac  xzacy  xzafu
helloworld.sh   xcj  xff  xib  xkx  xnt  xqp  xtl  xwh    xzaad  xzacz  xzafv
iff.sh          xck  xfg  xic  xky  xnu  xqq  xtm  xwi    xzaae  xzada  xzafw
ifs.sh          xcl  xfh  xid  xkz  xnv  xqr  xtn  xwj    xzaaf  xzadb  xzafx
logmd5sum.md5   xcm  xfi  xie  xla  xnw  xqs  xto  xwk    xzaag  xzadc  xzafy
LOG.TXT         xcn  xfj  xif  xlb  xnx  xqt  xtp  xwl    xzaah  xzadd  xzafz
output.session  xco  xfk  xig  xlc  xny  xqu  xtq  xwm    xzaai  xzade  xzaga
std.sh          xcp  xfl  xih  xld  xnz  xqv  xtr  xwn    xzaaj  xzadf  xzagb
test2.txt       xcq  xfm  xii  xle  xoa  xqw  xts  xwo    xzaak  xzadg  xzagc
test3.txt       xcr  xfn  xij  xlf  xob  xqx  xtt  xwp    xzaal  xzadh  xzagd
test.txt        xcs  xfo  xik  xlg  xoc  xqy  xtu  xwq    xzaam  xzadi  xzage
TEST.TXT        xct  xfp  xil  xlh  xod  xqz  xtv  xwr    xzaan  xzadj  xzagf
timing.log      xcu  xfq  xim  xli  xoe  xra  xtw  xws    xzaao  xzadk  xzagg
typescript      xcv  xfr  xin  xlj  xof  xrb  xtx  xwt    xzaap  xzadl  xzagh
xaa             xcw  xfs  xio  xlk  xog  xrc  xty  xwu    xzaaq  xzadm  xzagi
xab             xcx  xft  xip  xll  xoh  xrd  xtz  xwv    xzaar  xzadn  xzagj
xac             xcy  xfu  xiq  xlm  xoi  xre  xua  xww    xzaas  xzado  xzagk
xad             xcz  xfv  xir  xln  xoj  xrf  xub  xwx    xzaat  xzadp  xzagl
xae             xda  xfw  xis  xlo  xok  xrg  xuc  xwy    xzaau  xzadq  xzagm

按照行分割,使用 -l number filename

dd

创建特定大小的文件,dd会克隆给定的输入内容,然后将一模一样的一份副本写入到输出。stdin,设备文件,普通文件都可作为输入,stdout,设备文件,普通文件也可作为输出。

创建一个内容全部为零的1MB大小的文件test.data./dev/zero是一个特殊的字符设备,它会返回0值字节。

FIGHTING...dd if=/dev/zero of=test.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.0024947 s, 420 MB/s

comm

comm命令可以比较两个已经排序的文件,它可以显示出第一个文件和第二个文件所独有的行以及这两个文件所共有的行。

不带任何参数的comm,结果输出的第一列包含只在file1文件中出现,第二列包含只在file2文件中出现,第三列是包含file1,file2共有的行。

 FIGHTING...comm test.txt test2.txt
		123
345
		666
	dong
haha
	hahha
	liu
sdf
 FIGHTING...

删除前两列,只打印第三列,-1选项可以删除第一列,-2选项可以删除第二列,最后留下第三列。同理删除第三列就可以打印两个互不相同的那些行。

 FIGHTING...comm test.txt test2.txt -1 -2
123
666
 FIGHTING...

chmod

chmod用于设置文件的权限。文件的权限有R,W,X对应的数字为4,2,1。同时一个文件有三个角色权限,一个是用户(u),即文件所属者,另一个是用户组(g),用于方便管理同一组用户,剩下一个是其他(o),即不是用户,也和用户不在一个组的其他角色。使用ls命令可以查看文件的所属者,以及用户组,其他角色的相应的权限。

 FIGHTING...ls -al test.txt
-rw-rw-r--. 1 ld ld 21 Dec 10 06:29 test.txt

改变用户的权限(注意,即使给文件加了执行(x)权限,但是如果其内容不是可执行,也不会产生什么效果),增加权限使用+,减少权限使用-,同时可以数字来进行权限的赋值,通过3位数字来赋值,例如764,每一位表示不同的角色,第一位表示用户,第二位表示用户组,第三位表示其他,同时每位数字表示的是权限的总和,例如第一位改为读写权限,即W+R = 4+2 = 6,即用数字6即可。

 FIGHTING...ll
total 8
-rw-rw-r--. 1 ld ld 23 Dec 10 06:29 test2.txt
-rw-rw-r--. 1 ld ld 21 Dec 10 06:29 test.txt
 FIGHTING...chmod u+x test.txt
 FIGHTING...ll
total 8
-rw-rw-r--. 1 ld ld 23 Dec 10 06:29 test2.txt
-rwxrw-r--. 1 ld ld 21 Dec 10 06:29 test.txt
-rwxrw-r--. 1 ld ld 21 Dec 10 06:29 test.txt
 FIGHTING..../test.txt
./test.txt: line 1: 123: command not found
./test.txt: line 2: 345: command not found
./test.txt: line 3: 666: command not found
./test.txt: line 4: haha: command not found
./test.txt: line 5: sdf: command not found

chown

改变用户所属组:chown user:group filename

-rwxrw-r--. 1 ld ld 21 Dec 10 06:29 test.txt
FIGHTING...chown ld:mysql test.txt
FIGHTING...ll
total 8
-rw-rw-r--. 1 ld ld    23 Dec 10 06:29 test2.txt
-rwxrw-r--. 1 ld mysql 21 Dec 10 06:29 test.txt

chattr

将文件设置为不可修改

 FIGHTING...sudo chattr +i test.txt
 FIGHTING...ll
total 8
-rw-rw-r--. 1 ld ld    23 Dec 10 06:29 test2.txt
-rwxrw-r--. 1 ld mysql 21 Dec 10 06:29 test.txt
 FIGHTING...rm -rf test.txt
rm: cannot remove ‘test.txt’: Operation not permitted

 

 

内容参考《Linux Shell脚本攻略》