Linux脚本攻略学习笔记之find与xargs组合以及tr实例演示

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/whandgdh/article/details/84374273

一、find与xargsjie组合

1、错误的组合方式

find . - type f -name  "*.txt" -print  | xargs rm -rf

这样做很危险。因为没有办法预测分隔find命令输出结果的定界符是什么(’\n’或者’ ‘),因此xarg是很可能会误认为它们是定界符 (如: hell text.txt 会被xargs误解为 hell 和text.txt)
只要我们把find 输出作为xargs的输入,就必须将 -print0 与find 结合使用,以字符null(’\0’)来分隔输出

2、正确的组合方式

find   . -type f -name "*.txt"  -print0 | xargs -0 rm -f 
  xargs  -0 将 \0 作为输入定界符.

这样就可以删除所有的txt文件

3、结合stdin运用while语句和子shell

cat  all_files_txt.txt | (while read arg;do cat $arg;done)

#等同于 cat  all_files_txt.txt | xargs -I {} cat {}

在这里插入图片描述
while 循环中,cat $arg 替换成任意数量的命令。

子shell 操作符内部的多个命令可以作为一个整体来运行。

cmd0 | (cmd1;cmd2;cmd3;) |cmd4

如果cmd1是cd/ 那么就会改变子shell 的工作目录,然而这种改变仅限于子shell内部。 cmd4 则完全不知道工作目录发生了变化

二、tr

tr 是Unix命令行专家工具箱中一件简约却不失精美的工具。它经常用来编写优美的单行命
令,作用不容小视。 tr 可以对来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。
它可以将一组字符变成另一组字符,因而通常也被称为转换(translate)命令。

2.1 语法

语法:
tr [options] set1 set2
tr 只能通过stdin(标准输入),而无法通过命令行参数来接受输入。
作用:将来自stdin 的输入字符从set1 映射到set2,然后将输出写入stdout。set1和set2是字符类或字符集。如果两个字符集的长度不相等,那么 set2 会不断重复其最后一个字符,直到长度与 set1 相同。如果 set2 的长度大于 set1 ,那么在 set2 中超出 set1 长度的那部分字符则全部被忽略。

2.2 实例

"HELLO WHO IS THIS 转换为小写

echo  "HELLO WHO IS THIS " |  tr 'A-Z' 'a-z'

在这里插入图片描述

‘ABD-}’ 、 ‘aA.,’ 、 ‘a-ce-x’ 以及 ‘a-c0-9’ 等均是合法的集合。
定义集合也很简单、只需要使用 “起始字符-终止字符”。如果不是一个连续的字符序列,那它就会被视为包含了三个元素的集合。 也就是 起始字符,- 终止字符。

2.3加密、解密实例

#加密 876543

echo 123456 | tr '0-9' '9876543210'

在这里插入图片描述

#解密

echo  876543 | tr '9876543210' '0-9'

在这里插入图片描述

2.4、ROT13算法演示

加密:
echo “tr came,tr saw,tr conquered.” | tr ‘a-zA-Z’ ‘n-za-mN-ZA-M’

得到输出ge pnzr,ge fnj, ge pbadhrerq.

在这里插入图片描述
解密:

echo  "ge pnzr,ge fnj, ge pbadhrerq." | 'n-za-mN-ZA-M'  tr 'a-zA-Z'

2.5、 tr还可以用来将制表符转换成空格

tr  '\t'  ' '

2.6、删除字符

-d
语法 cat file.txt | tr -d ‘[set1]’
#只使用set1 ,不使用set2
下图实例删除 字符串 Hello 123 world 456 中的数字

echo  "Hello 123 world 456 " | tr -d '0-9'

在这里插入图片描述

2.7、字符集补集

c 选项
语法 tr -c [set1] [set2]
set1的补集意味着这个集合中包含set1中没有的所有字符

echo hello 1 char 2 next | tr -d -c '0-9 \n'
#补集 -c '0-9 \n' 表示除数字空格、换行符之外的所有字符
#-d 删除,即删除除数字空格、换行符之外的所有字符

在这里插入图片描述

2.8、压缩字符

s 选项 压缩字符
下面删除 "Hello world "多余的空格

echo "Hello   world  " | tr -s ' '

在这里插入图片描述

删除多余的换行符
文本如下
在这里插入图片描述

    cat mutil_line.txt  | tr -s  '\n'

结果如下:
在这里插入图片描述

2.9 字符类

tr 可以像使用集合一样使用各种不同的字符类,这些字符类如下所示:
 alnum :字母和数字。
 alpha :字母。
 cntrl :控制(非打印)字符。
 digit :数字。
 graph :图形字符。
 lower :小写字母。
 print :可打印字符。
 punct :标点符号。
 space :空白字符。
 upper :大写字母。
 xdigit :十六进制字符

可以按照下面的方式选择并使用所需的字符类:
tr [:class:] [:class:]
例如:
tr ‘[:lower:]’ ‘[:upper:]’

猜你喜欢

转载自blog.csdn.net/whandgdh/article/details/84374273