linux tr命令-转换或删除输入的字符的

概述

使用tr命令可以对输入的字符串的字符进行替换、压缩和删除(使用-d选项),需要注意的是,每个替换行为是根据原字符串进行的,也可以理解成是同时一一替换,而不是等待第一个字符替换完了再替换下一个。下图说明


image
# echo "helloc,world" | tr  'lo' 'oe'  //l替换o后,那候些替换过来的o不会替换为e
heooec,werod

命令格式

tr [-cdst][--help][--version][第一字符集][第二字符集]  
tr [OPTION]…SET1[SET2] 

参数说明:

  • 字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数“字符集2”;
  • 字符集2:指定要转换成的目标字符集。

'A-Z' 和 'a-z'都是集合,集合是可以自己制定的,例如:'ABD-}'、'bB.,'、'a-de-h'、'a-c0-9'都属于集合,集合里可以使用'\n'、'\t',可以可以使用其他ASCII字符。

  • -c, --complement:反选设定字符。也就是符合 SET1的部份不做处理,不符合的剩余部份才进行转换
  • -d, --delete:删除指令字符
  • -s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
  • -t, --truncate-set1:削减 SET1 指定范围,使之与 SET2 设定长度相等,然后SET1中的字符替换成SET2字符

实例

删除数字

# echo "1234abcd" | tr -d [:digit:]
abcd

删除特定字符

# echo "1234567843ab,cd" | tr -d 34
125678ab,cd

反向删除

# echo "1234567843ab,cd" | tr -Cd 34
3443

将制表符转换为空格

cat text | tr '\t' ' '

缩减连续重复的字符成指定的单个字符

# echo "123333a4444ab,cd" | tr -s 34 zs   //将连续的3和4分别替换成单个z好s
12zasab,cd

小写转大写

# echo "hello,world" | tr a-z A-Z
HELLO,WORLD
# echo "hello,world" | tr [:lower:] [:upper:]
HELLO,WORLD
# echo "hello,world" | tr a-z A-Z
HELLO,WORLD
# echo "hello,world" | tr [:lower:] [:upper:]
HELLO,WORLD

删除Windows文件“造成”的'^M'字符

cat file | tr -s "\r" "\n" > new_file
或
cat file | tr -d "\r" > new_file
# echo "helloc,world" | tr -t 'lowc' 'oe' //将lowc截断成lo,然后将字符串中l替换成o,o替换成e,需要注意的是,每个替换行为是根据原字符进行的
heooec,werod
tr --help
Usage: tr [OPTION]... SET1 [SET2]
Translate, squeeze, and/or delete characters from standard input,
writing to standard output.

  -c, -C, --complement    use the complement of SET1
  -d, --delete            delete characters in SET1, do not translate
  -s, --squeeze-repeats   replace each input sequence of a repeated character
                            that is listed in SET1 with a single occurrence
                            of that character
  -t, --truncate-set1     first truncate SET1 to length of SET2
      --help     display this help and exit
      --version  output version information and exit

SETs are specified as strings of characters.  Most represent themselves.
Interpreted sequences are:

  \NNN            character with octal value NNN (1 to 3 octal digits)
  \\              backslash
  \a              audible BEL
  \b              backspace
  \f              form feed
  \n              new line
  \r              return
  \t              horizontal tab
  \v              vertical tab
  CHAR1-CHAR2     all characters from CHAR1 to CHAR2 in ascending order
  [CHAR*]         in SET2, copies of CHAR until length of SET1
  [CHAR*REPEAT]   REPEAT copies of CHAR, REPEAT octal if starting with 0
  [:alnum:]       all letters and digits
  [:alpha:]       all letters
  [:blank:]       all horizontal whitespace
  [:cntrl:]       all control characters
  [:digit:]       all digits
  [:graph:]       all printable characters, not including space
  [:lower:]       all lower case letters
  [:print:]       all printable characters, including space
  [:punct:]       all punctuation characters
  [:space:]       all horizontal or vertical whitespace
  [:upper:]       all upper case letters
  [:xdigit:]      all hexadecimal digits
  [=CHAR=]        all characters which are equivalent to CHAR

Translation occurs if -d is not given and both SET1 and SET2 appear.
-t may be used only when translating.  SET2 is extended to length of
SET1 by repeating its last character as necessary.  Excess characters
of SET2 are ignored.  Only [:lower:] and [:upper:] are guaranteed to
expand in ascending order; used in SET2 while translating, they may
only be used in pairs to specify case conversion.  -s uses SET1 if not
translating nor deleting; else squeezing uses SET2 and occurs after
translation or deletion.

GNU coreutils online help: 
For complete documentation, run: info coreutils 'tr invocation'

你可能感兴趣的:(linux tr命令-转换或删除输入的字符的)