Linux命令之tr

tr '[0*4]' '*' < data.txt

若data.txt中的任意行中出现了连续4个0,就是4个****替换。必须是[0*4]形式,不能是0*4,否则数字4会被替换成*,原因是[0*4]是tr的语法[CHAR*REPEAT],儿后面是*也可以是****,这里只使用了一个*,是因为tr的一个特性:当SET1(上面的[0*4])的长度大于SET2(上面的*)时,SET2会重复SET1的最后一个字符。例如,SET1是0000,由于SET2是一个*,先将SET1变成*000,再由于SET2的长度小于SET1,重复SET1的最后一个*,变成****

tr -cs '[:lower:][:upper:]' '\n' < data.txt
将将data.txt中的每一行数据中不符合所有大小写字符的数据用\n替换(当SET2的长度小于SET1时,重复SET1的最后一个字符),然后再压缩\n为一个\n。例如,输入是abcd1234efgh,针对这个数据,其满足SET1条件后的补集是1234,即替换成4个\n(换行),经过压缩后,变成一个\n。输出便是

abcd
efgh
tr -s '[:punct:][:blank:]' '\n' < data.txt
这个例子和上面的意思基本一样,不过不是替换SET1的补集,而是替换满足SET1条件的数据。

tr -ds '[:digit:]' '\n' < data.txt
删除data.txt中每一行的数字,再针对每一行的数据进行其中的\n压缩

tr -d -- -axM < data.txt
若要删除data.txt中的每一行中的字符 - , a , x , M,可用这种形式,中间的两个--表示到此停止tr的OPTION的处理,后面的数据都是SET1的数据


选项总结:

选项SET1SET2意义
用SET2的数据替换每一行符合SET1模式的数据
-d删除每一行中符合SET1模式的数据
-s用SET1的数据压缩每一行的符合模式的数据
-s用SET2的数据先替换符合SET1模式的数据,然后压缩每一行的符合SET2模式的数据
-ds删除每一行中符合SET1模式的数据,然后压缩符合SET2模式的数据
-cs用SET2的数据替换不符合SET1模式的数据,然后压缩每一行的符合SET2模式的数据











替换过程的长度总结:

若SET1的长度等于SET2的长度,则每一个字符对应替换。例如,设SET1是0000,SET2是*wkz,则替换后,符合SET1的数据变为*wkz

若SET1的长度大于SET2的长度,则SET2将重复SET1最后一个匹配的字符。例如SET1是a-z,表示26个字符,SET2是A-B,则A替换a,B替换b,然后这最后一个替换的B将不停重复,知道长度和SET1的相等

若SET1的长度小于SET2的长度,这种情况不允许,结果未定义


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值