You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.2 KiB

tr

说明

tr命令 可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令

选项

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

-c, -C, --complement		首先补足SET1,即取代所有不属于第一字符集的字符
-d, --delete			    删除匹配SET1 的内容,并不作替换
-s, --squeeze-repeats	    如果匹配于SET1 的字符在输入序列中存在连续的重复,在替换时会被统一缩为一个字符的长度
-t, --truncate-set1		    先将SET1 的长度截为和SET2 相等

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:]	所有的十六进制数
  [=字符=]	所有和指定字符相等的字符

使用方式:   tr '[:lower:]' '[:upper:]'

仅在SET1 和SET2 都给出,同时没有-d 选项的时候才会进行替换。
仅在替换时才可能用到-t 选项。如果需要SET2 将被通过在末尾添加原来的末字符的方式
补充到同SET1 等长。SET2 中多余的字符将被省略。只有[:lower:] 和[:upper:]
以升序展开字符在用于替换时的SET2 中以成对表示大小写转换。-s 作用于SET1既不
替换也不删除否则在替换或展开后使用SET2 缩减。

实例

echo "HELLO WORLD" | tr 'A-Z' 'a-z'         # 将输入字符由大写转换为小写
echo 'Test' | tr '[:lower:]' '[:upper:]'    # 将Test转换为大写
echo "hello 123 world 456" | tr -d '0-9'    # 使用tr删除字符
cat text | tr '\t' ' '                      # 将制表符转换为空格
tr -dc '[:print:]' < /dev/urandom           # 过滤掉不能打印的内容

# 字符集补集从输入文本中将不在补集中的所有字符删除此例中补集中包含了数字0~9、空格和换行符\n所以没有被删除其他字
# 符全部被删除了
echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d -c '0-9 \n'

echo "thissss is     a text linnnnnnne." | tr -s ' sn'     # 用tr压缩字符可以压缩输入中重复的字符
echo 1 2 3 4 5 6 7 8 9 | xargs -n1 | echo $[ $(tr '\n' '+') 0 ]     # 巧妙使用tr做数字相加操作

# 删除Windows文件“造成”的'^M'字符
cat file | tr -s "\r" "\n" > new_file
cat file | tr -d "\r" > new_file