Analysis of common linux commands

Time:2021-6-14

tr

NAME

  • tr – translate or delete characters
  • Characters from standard input can be replaced, compressed and deleted. It can change a group of characters into another group of characters, and is often used to write beautiful single line commands, which is very powerful.

SYNOPSIS

tr [OPTION]… SET1 [SET2]

SET1

  • Specifies the original character set to convert or delete. When performing a conversion operation, you must use the parameter “character set 2” to specify the target character set of the conversion. However, the parameter “character set 2” is not needed for deletion;

SET2

  • Specifies the target character set to convert to.

DESCRIPTION

Translate, squeeze, and/or delete characters from standard input,writing to standard output.

-c, -C, --complement

  • use the complement of SET1
  • Replaces all characters that do not belong to the first character set
str="hello world"
# hello world
echo ${str}
# AAllAAAAAlA
echo ${str} | tr -c 'll\n' 'A'
# hello-world
echo ${str} | tr -c 'a-z\n' '-'
# hello-world
echo ${str} | tr -C 'a-z\n' '-'

-d, --delete

  • delete characters in SET1, do not translate
  • Delete all characters belonging to the first character set;
str="hello world"
# hello world
echo ${str}
# helloworld
echo ${str} | tr -d ' '
# he wrd
echo ${str} | tr -d 'llo'

-s, --squeeze-repeats

  • replace each sequence of a repeated character that is listed in the last specified SET, with a single occurrence of that character
  • The continuous repetition of characters as a single character
str="thissss is      a text linnnnnnne."
# thissss is a text linnnnnnne.
echo ${str}
# this is a text line.
echo ${str} | tr -s ' sn'

-t, --truncate-set1

  • first truncate SET1 to length of SET2
  • First, delete the more characters in the first character set than in the second character set
str="hello world"
# hello world
echo ${str}
# heaao worad
echo ${str} | tr -t 'l' 'a'
# hello-world
echo ${str} | tr -t ' ' '-'

--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 the last specified SET, and occurs after translation or deletion.

Example

#####################################################
#Character set complement to delete all characters that are not in the complement from the input text
#  1  2  3  4
echo aa.,a 1 b#$bb 2 c*/cc 3 ddd 4 | tr -d -c '0-9 \n'

#Use tr to add numbers
# 45
echo 1 2 3 4 5 6 7 8 9 | xargs -n1 | echo $[ $(tr '\n' '+') 0 ]

#Except for '^ m' character of windows file 'cause':
# cat file | tr -s "\r" "\n" > new_file
# cat file | tr -d "\r" > new_file

See

All rights reserved