shell实现tr删除替换详解

tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换。

语法:tr [–c/d/s/t] [SET1] [SET2]   #SET1: 字符集1;SET2:字符集2
            -c:complement,用SET2替换除SET1以外的字符。
            -d:delete,删除SET1中所有的字符,不转换。
            -s:squeeze-repeats,压缩SET1中重复的字符。
            -t:truncate-set1,将SET1用SET2转换,一般缺省为-t。

1、去除重复的字符

#删除空白行就是删除换行符/n。
    #注意:这些空白行上只有回车符,没有空格符。

$ cat test.txt

I love linux!

Hello World!

Shell is worthy to been studied.

#这里用换行符的转义字符\n.
   #注意:此处用-s删除了多余的换行符,如果用-d,则会删除所有的换行符.

$  cat test.txt | tr -s ["\n"]
         I love linux!
         Hello World!
         Shell is worthy to been studied.
   #也可以用八进制符\012,\012与\n都是换行符。
     $  cat test.txt | tr -s "[\012]"
         I love linux!
         Hello World!
         Shell is worthy to been studied.

2、大小写互换

# 将语句中所有的小写字母变成大写字母,其中-t可省略。
     $ echo "Hello World I Love You" |tr [-t] [a-z] [A-Z]
        HELLO WORLD I LOVE YOU
# 将语句中所有的大写字母变成小写字母。
    $ echo "Hello World I Love You" |tr [A-Z] [a-z]
       hello world i love you

# 也可以利用字符类进行转换。
# [:lower:]代表小写字母,[:upper:]代表大写字母。
    $ echo "Hello World I Love You" |tr [:lower:] [:upper:]
       HELLO WORLD I LOVE YOU

3、删除指定的字符

$ cat test.txt
       Monday     09:00
       Tuesday    09:10
       Wednesday  10:11
       Thursday   11:30
       Friday     08:00
       Saturday   07:40
       Sunday     10:00
   # 现在要删除处理星期之外的所有字符。
   # -d代表删除,[0-9]代表所有的数字,[: ]代表冒号和空格。
      $  cat test.txt | tr -d "[0-9][: ]"
          Monday
          Tuesday
          Wednesday
          Thursday
          Friday
          Saturday
          Sunday

4、利用-c进行补集的替换

# 有时候在文本中我们只知道要保留的一些字符,其他字符种类繁多,就可以使用补集的替换。

$ cat test.txt
        Monday     09:00
        Tuesday    09:10
        Wednesday  10:11
        Thursday   11:30
        Friday     08:00
        Saturday   07:40
        Sunday     10:00

# 我们只需要星期,则思路就是除了字母,其他统统替换掉。

# 这里,-c:用换行符替换掉除了字母外的所有字符;-s:删除多余的换行符。

$  cat test.txt|tr -cs  "[a-z][A-Z]" "\n"
         Monday
         Tuesday
         Wednesday
         Thursday
         Friday
         Saturday
         Sunday

总结:其中大小写字母的转换,删除不需要的字符比较常用。tr语法简单,易用。

(0)

相关推荐

  • PowerShell查询和删除打印任务操作代码实例

    适用于Windows 8.1或Server 2012 R2 Windows 8.1 和 Server 2012 R2上自带了一个PowerShell组件:"PrintManagement",它包含了所有管理本机和远程打印机的命令. 在之前的小技巧中,我们演示了如何读取打印机任务.每一个打印任务都有一个属性JobStatus ,用来表示该任务是否打印成功. 所有的状态可以这样获取: 复制代码 代码如下: PS> Import-Module PrintManagement   PS&

  • PowerShell中删除空格、点号、减号和换行方法代码实例

    复制代码 代码如下: $text = ' ... Hello ...---  ' $text.Trim(" .-`t`n`r") 结果只显示:Hello

  • Shell脚本实现递归删除空文件夹

    有时我们需要递归删除空文件夹,网上找了一下,没有发现比较好的Shell脚本,于是自己动手写了一个 脚本 复制代码 代码如下: #!/bin/bash # author: 十年后的卢哥哥 # des: delete empty directories recursive deleteempty() {   find ${1:-.} -mindepth 1 -maxdepth 1 -type d | while read -r dir   do     if [[ -z "$(find "

  • Shell中如何删除文本比较长的行的实现方法

     Shell中如何删除文本比较长的行的实现方法 有的时候需要对文件执行删除删除操作,这个时候比较常用的会使用vi命令中的dd命令,比如先执行10G(跳转到第10行),然后再执行20dd(删除20行),但实际情况未必是这么常规,比如说,要删除文件中,某行长度超过200个字符的行,如果文本比较小,还好,如果是几万行,几十万行的呢? 这个想用vi就不现实了. 我然想到的办法就是:比如说,通过sed,awk,egrep命令来达到目的. 举个简单例子. 假如说如下文本文件,要将其中长度为5字符以上的给删除

  • Shell脚本实现删除邮件队列

    最近遇到了一个麻烦事:机器上邮件队列里老是被塞满,但是又不知道是什么地方发邮件写入的,十分蛋疼,没办法,只有临时处理一下了,写了个删除邮件的脚本rm_mqueue.sh. 复制代码 代码如下: #/bin/bash ###################################### #  touched by lingyun1 on 2014-12-01  # ###################################### #定义堵塞邮件文件路径 quepath=/var

  • 使用bash shell删除目录中的特定文件的3种方法

    我是一名Linux新用户.现在我需要清理一个下载目录中的文件,其实我就是想从-/Download/文件夹删去除了以下格式的文件外所以其它文件: 1.*.iso - 所有的iso格式的文件. 2.*.zip - 所有zip格式的文件. 我如何在一个基于Linux,OS X 或者 Unix-like 系统上的bash shell中删除特定的文件呢? Bash shell 支持丰富的文件模式匹配符例如: 1.* - 匹配所有的文件. 2.? - 匹配文件名中的单个字母. 3.[...] - 匹配封闭括

  • Shell脚本实现删除一年前文件功能分享

    复制代码 代码如下: #!/bin/bash #Description: delete files #=====定义当前年份,月份以及文件所在目录=====# currentYear=`date +%Y`                                        currentMonth=`date  +%m |awk -F'0' '{print $2}'`   videodir=/var/video                                      

  • Shell脚本自动删除指定大小以上的备份文件

    最近本地虚拟机的空间老是被备份给占满,为了偷懒不想自己天天登录上去清除,才写了这个自动清理脚本. 系统:centos 5.x 脚本内容: cat make_room.sh 复制代码 代码如下: #!/bin/bash #size=`df -hP|grep /dev/mapper/VolGroup00-LogVol00|awk '{print $4}'|cut -f 1 -d "G"` size=`df -mP|grep /dev/mapper/VolGroup00-LogVol00|a

  • shell实现tr删除替换详解

    tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换. 语法:tr [–c/d/s/t] [SET1] [SET2]   #SET1: 字符集1:SET2:字符集2             -c:complement,用SET2替换除SET1以外的字符.             -d:delete,删除SET1中所有的字符,不转换.             -s:squeeze-repeats,压缩SET1中重复的字符.             -t:truncate-se

  • shell脚本--sed的用法详解

    sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过. sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增.删.改.查等操作,支持按行.按字段.按正则匹配文本内容,灵活方便,特别适合于大文件的编辑.本文主要介绍sed的一些基本用法,并通过shell脚本演示sed的使用实例. 1.sed的使用方法,调用sed 命令的语法有两种: 一.在命令行指定sed指令对文本进行处理:sed +选项  '指令' 文件 二.先将sed指令保存到文件中,将该文件

  • Git基础学习之文件删除操作命令详解

    目录 1.删除文件说明 2.删除文件操作 (1)仅删除暂存区的文件 (2)完全删除文件 3.本文用到的命令总结 1.删除文件说明 在Git工作目录中要删除某个文件,首先要清楚该文件所处的状态. 若要是该文件未被Git管理,在工作区直接进行删除即可.(不演示) 但是,若该文件已经经过多次git add与git commit操作后,就必须要从已跟踪文件清单中删除(确切地说,是在暂存区中删除),然后提交. 可以用git rm命令完成此项工作,并连带从工作目录中删除指定的文件,这样文件之后就不会出现在未

  • Angularjs的$http异步删除数据详解及实例

    Angularjs的$http异步删除数据详解及实例 有人会说删除这东西有什么可讲的,写个删除的service,controller调用一下不就完了. 嗯...看起来是这样,但是具体实现起来真的有这么简单吗?首先有以下几个坑 怎么确定数据是否删除成功? 怎么同步视图的数据库的内容? 1.思路 1.实现方式一 删除数据库中对应的内容,然后将$scope中的对应的内容splice 2.实现方式二 删除数据库中对应的内容,然后再reload一下数据(也就是再调用一次查询方法,这种消耗可想而知,并且还要

  • Linux shell数组循环的实例详解

    shell数组循环 测试shell数组,循环的例子: arr=("a" "b" "c") echo "所有的内容如下:"${arr[@]} echo "数组的长度:"${#arr[*]} for var in ${arr[@]} do echo "打印的内容:"$var done 输出的内容如下: 以上就是Linux shell数组循环的实例详解,如有疑问请留言或者到本站社区交流讨论,感

  • 基于shell的if和else详解

    基本语法 shell的if语法和C语言等高级语言非常相似,唯一需要注意的地方就是shell的if语句对空格方面的要求比较严格(其实shell对所有语法的空格使用都比较严格),如果在需要空格的地方没有打上空格,都会报错.如if [ $1x == "ip"x ];then echo "abc";fi中少一个空格都会报错.另外shell的if语句必须以fi作为结尾,不然同样会报错. 有else和elif时也一样,需要注意空格的问题,下面这个例子可以作为参考 if [ $1

  • shell脚本 自动创建用户详解及实例代码

    shell脚本 自动创建用户详解 需求:判断用户zhangsan是否存在,不存在就创建并设置密码为123456 1.vi createuser.sh 2.写入: USER_COUNT=`cat /etc/passwd | grep '^zhangsan:' -c` USER_NAME='zhangsan' if [ $USER_COUNT -ne 1 ] then useradd $USER_NAME echo "123456" | passwd $USER_NAME --stdin

  • java 中List删除实例详解

    java 中List删除实例详解 1.循环删除List中的元素 public static void main(String[] args) { List<String> t=new ArrayList<String>(); for (int i = 0; i < 10; i++) { t.add(""+i+""); } System.out.println("原有的List:"+t.toString()); for

  • php ajax confirm 删除实例详解

    本文主要介绍了php ajax confirm 删除实例,分享给大家,也给自己留个笔记,具体如下: <button name="del" type="button" class="btn btn-primary btn-xs" id="del">删除</button> $("button[name=del]").click(function(){ var statu = confir

  • Django admin禁用编辑链接和添加删除操作详解

    禁用admin中models的编辑链接和添加删除按钮 方法如下: class MyModelAdmin(models.ModelAdmin): ... List_display_links = None #禁用编辑链接 def has_add_permission(self, request): # 禁用添加按钮 return False def has_delete_permission(self, request, obj=None): # 禁用删除按钮 return False def g

随机推荐