运算以及终端特征的设置等,tr的通令用法

Linux/Unix tr、变量、运算以及终端特性的设置等

tr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。
特别要注意一点:tr 只能进行字符的替换、缩减和删除,不能用来替换字符串。

linux:tr的命令用法

 

tr命令格式为:

 

使用tr的-s选项去除重复出现的字符:

tr -c -d
-s[“string1_to_translate_from”][“string2_to_translate_to”]
file
这里:
  -c  :用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
  -d  :删除字符串1中所有输入字符。
  -s  :删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
  file  :是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。

可以把tr看作为一个简化的sed工具,tr表示为:translate。tr命令主要用于实现以下两个功能

  www.2cto.com  

字符范围:

替换操作的字符串转换。

[[email protected]
tr.folder]$ cat oops.txt 

指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。
[a-z] a-z内的字符组成的字符串。
[A-Z] A-Z内的字符组成的字符串。
[0-9] 数字串。
\octal 一个三位的八进制数,对应有效的ASCII字符。
[O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。
tr中特定控制字符的不同表达方式
速记符含义八进制方式
\a Ctrl-G 铃声\007
\b Ctrl-H 退格符\010
\f Ctrl-L 走行换页\014
\n Ctrl-J 新行\012
\r Ctrl-M 回车\015
\t Ctrl-I tab键\011
\v Ctrl-X \030

 

And the cowwwwwws went homeeeee

应用例子

删除操作的字符串转换,可以很容易的删除一些控制字符或者是空行。

Or did theyyyyyyyyyyyyy

(1)去除oops.txt里面的重复的小写字符 ( # -s会保留第一个字符)

tr命令能够实现的功能,都能够用sed命令来实现。但就具体的替换功能来说,tr用起来更容易,也比较简单。

[[email protected]
tr.folder]$ tr -s “[a-z]” < oops.txt 

[[email protected]
~]# cat oops.txt
  ddddfffabccccc
  lerrrrdddd
[[email protected]
~]# tr -s “[a-z]” < oops.txt > result.txt
[[email protected]
~]# cat result.txt
  dfabc
  lerd

 

And the cows went home

(2)删除空行

一,命令格式

Or did they

[[email protected]
~]# cat oops.txt
  ddddfffabccccc

[html] 

 

  lerrrrdddd
[[email protected]
~]# tr -s “[\012]” < oops.txt > result.txt
[[email protected]
~]# cat result.txt
  ddddfffabccccc
  lerrrrdddd

tr [option] [“string1”] [“string2”] < file 

删除空行:  www.2cto.com  

(3)删除所有空行

 

[[email protected]
tr.folder]$ cat oops.txt 

[[email protected]
~]# cat oops.txt
   ddddfffabccccc

常用的选项有:

And the cowwwwwws went homeeeee

   lerrrrdddd
[[email protected]
~]# tr -d “[\012]” < oops.txt > result.txt
[[email protected]
~]# cat result.txt
   ddddfffabccccclerrrrdddd

默认选项。就是没有任何选项的时候,tr默认为替换操作,就是将string1在文件中出现的字符替换为string2中的字符,这里要注意的是替换关系。

 

(4)小写到大写

-c选项,用string1中字符的补集替换string1,这里的字符集为ASCII。

Or did theyyyyyyyyyyyyy

[[email protected]
~]# cat oops.txt
   ddddfffabccccc
   errrrdddd
[[email protected]
~]# cat oops.txt | tr “[a-z]” “[A-Z]” > result.txt
[[email protected]
~]# cat result.txt
   DDDDFFFABCCCCC
   ERRRRDDDD

-d选项,删除文件中所有在string1中出现的字符。

 

(5)删除指定的字符(# -d 与 -s 不同,-d会全部删除,但-s会保留第一个)

-s选项,删除文件中重复并且在string1中出现的字符,只保留一个。

fas ods css

[[email protected]
~]# cat oops.txt
  ddddfffabccccc
  errrrdddd
[[email protected]
~]# cat oops.txt | tr -d “[bd]” > result.txt
[[email protected]
~]# cat result.txt
  fffaccccc
  errrr
[[email protected]
~]# cat oops.txt | tr -s “[bd]” > result.txt
[[email protected]
~]# cat result.txt
  dfffabccccc
  errrrd

-c选项在使用时,只是将string1替换为现在的补集,如在使用

[[email protected]
tr.folder]$ tr -s “[\012]” < oops.txt 

(6)替代指定的字符(#一对一的替代)

 

And the cowwwwwws went homeeeee

[[email protected]
~]# cat oops.txt
  ddddfffabccccc
  errrrdddd
[[email protected]
~]# cat oops.txt | tr “[bd]” “[BD]” > result.txt
[[email protected]
~]# cat result.txt
  DDDDfffaBccccc
  errrrDDDD

C代码  

Or did theyyyyyyyyyyyyy

特别要注意一点:tr 只能进行字…

[html]   

fas ods css

[[email protected]
client]# echo “hello world,root,2012” | tr -c “0-9” “*”   

 

*****************2012*    

转换大小写:

 

[[email protected]
tr.folder]www.bifa365.com,$ echo “hello today is a Fine DAY” | tr “[a-z]” “[A-Z]”

可以看出,我们使用0-9,添加-c选项后,会把0-9替换为其补集,这时补集自然不包含0-9,而包含很多其它的字符,接下来就把所有的其它字符都替换成*号,但不包含数字。

HELLO TODAY IS A FINE DAY

如果只需要替换数字的话:

 

C代码  

删除数字:

[html]   

[[email protected]
tr.folder]$ cat oops.txt 

[[email protected]
client]# echo “hello world,root,2012” | tr “0-9” “*”   

And the cowwwwwws went homeeeee

hello world,root,****    

23

 

3123asadfas

二,字符串的取值范围

123ffff

指定string或string2的内容时,只能使用单字符或字符串范围或列表。

 

[a-z] a-z内的字符组成的字符串。

Or did theyyyyyyyyyyyyy

[A-Z] A-Z内的字符组成的字符串。

 

[0-9] 数字串。

12

\octal 一个三位的八进制数,对应有效的ASCII字符。

 

[O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。

 

 

fas ods css

三,控制字符的不同表达方式

[[email protected]
tr.folder]$ tr -cs “[a-z][A-Z]” “[\012*]” < oops.txt 

速记符 含义 八进制方式

And

\a Ctrl-G  铃声\007

the

\b Ctrl-H 退格符\010

cowwwwwws

\f Ctrl-L  走行换页\014

went

\n Ctrl-J  新行\012

homeeeee

\r Ctrl-M 回车\015

asadfas

\t  Ctrl-I  tab键\011

ffff

\v Ctrl-X \030
注意这些控制字符,如果想在linux下输入,如我们可能需要输入^M这种字符,只需ctrl+V+M同时按下即可。

Or

 

did

四,字符替换

theyyyyyyyyyyyyy

这是tr的默认操作,先看下面的命令和输出

fas

C代码  

ods

[html]   

css

[[email protected]
client]# echo “hello world” | tr “a-z” “A-Z”   

 

HELLO WORLD   

[[email protected]
etc]$ echo “`who | wc -l` users are on today”

[[email protected]
client]# echo “hello world” | tr “a-l” “A-Z”   

2 users are on today

HELLo worLD   

 

[[email protected]
client]# echo “hello world” | tr “a-z” “A-H”   

查看当前终端特性:

HEHHH HHHHD    

[[email protected]
testDir]$ stty -a

 

speed 38400 baud; rows 44; columns 167; line = 0;

第一行输出就是将小写换成大写。

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol =
<undef>; eol2 = <undef>; swtch = <undef>; start = ^Q;
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;

第二行输出将小写中的a-l分别换成A-L,而将小写中的l以后的字符都不替换。

lnext = ^V; flush = ^O; min = 1; time = 0;

第三行输出将小写中的a-h换成A-H,而h以后的字符都换成H,因为后者的替换空间没有前面的字符空间大,所以就重复后面的H,相当于后面的字符是A-HHH……HHHHH。

-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts

如果我们想要进行大小写转换,可以按下面的输入:

-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon
-ixoff -iuclc -ixany -imaxbel -iutf8

C代码  

opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0
vt0 ff0

[html]   

isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop
-echoprt echoctl echoke

tr “a-z” “A-Z” < inputfile    

 

 

设置styy xxx “xxx”

五,去除重复字符

 

这个时候,所用的选项是-s选项,如:

设置变量的默认值:

C代码  

[[email protected]
testDir]$ day=bad

[html]   

[[email protected]
testDir]$ echo “today is a ${day:-fine} day”

[[email protected]
client]# echo “hello world,root” | tr -s “ao”   

today is a bad day

hello world,rot   

[[email protected]
testDir]$ unset day

[[email protected]
client]# echo “hello world,root” | tr -s “lo”   

[[email protected]
testDir]$ echo “today is a ${day:-fine} day”

helo world,rot   

today is a fine day

[[email protected]
client]# echo “hello world,root” | tr -s “a-z”   

 

helo world,rot   

设置只读变量:

[[email protected]
client]# echo “hello world,root” | tr -s “0-9”   

[[email protected]
testDir]$ readonly

hello world,root    

declare -ar BASH_VERSINFO='([0]=”3″ [1]=”1″ [2]=”17″ [3]=”1″
[4]=”release” [5]=”i686-redhat-linux-gnu”)’

 

declare -ir EUID=”501″

第一行表示将输入字符串中的包含在”ao”字符集中的重复字符去掉,只留一个。因为”hello
world,root”,只有o满足条件,所以将root变成rot,把中间的两个o变成一个。

declare -ir PPID=”19022″

第二行将hello和root两个字符都压缩了。

declare -r
SHELLOPTS=”braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor”

第三行表示将a-z中的除复字符都去掉。

declare -ir UID=”501″

第三行表示将字符串中的重复的且重复字符在0-9字符集中的字符去掉,这里没有。

[[email protected]
testDir]$ weather=fine

 

[[email protected]
testDir]$ readonly weather

如果我们想要去掉空行,可以这样操作:

[[email protected]
testDir]$ echo ${weather}

[html] 

fine

tr -s “\n” < inputfile 或者 tr -s “\012” <inputfile //
这两个是一样的。  

[[email protected]
testDir]$ weather=fine2   

就是将重复的换行符去掉,只留一个。

-bash: weather: readonly variable

 

 

六,删除字符

设置环境变量:

-d选项和-s选项类似,只不过-d选项会删除所有出现的字符。

[[email protected]
testDir]$ console=tty1;export console

C代码  

[[email protected]
testDir]$ echo $console              

[html]   

tty1

[[email protected]
client]# echo “hello world,root” | tr -d “a-h”   

 

llo worl,root   

显示所有环境变量:

[[email protected]
client]# echo “hello world,root,2012” | tr -d “a-z”   

env

 ,,2012   

 

[[email protected]
client]# echo “hello world,root,2012” | tr -d “0-9”   

设置终端类型:

hello world,root,   

[[email protected]
testDir]$ TERM=linux;export TERM

 

[[email protected]
testDir]$ echo $TERM

来源:

linux

 

 

用法:tr [选项]… SET1 [SET2]

shell中的运算:

从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

[[email protected]
testDir]$ var=`date +%Y%m%d`

 

[[email protected]
testDir]$ let “var2=$var+1” 

  -c, -C, –complement        首先补足SET1

[[email protected]
testDir]$ echo $var2        

  -d, –delete            删除匹配SET1 的内容,并不作替换

20130304

  -s, –squeeze-repeats    如果匹配于SET1 的字符在输入序列中存在连续的

[[email protected]
testDir]$ echo $((var2=$var+3))

                重复,在替换时会被统一缩为一个字符的长度

20130306

  -t, –truncate-set1        先将SET1 的长度截为和SET2 相等

[[email protected]
testDir]$ echo var2=$[$var+3]

      –help        显示此帮助信息并退出

var2=20130306

      –version        显示版本信息并退出

[[email protected]
testDir]$ let “var++”

 

[[email protected]
testDir]$ echo $var

SET 是一组字符串,一般都可按照字面含义理解。解析序列如下:

20130304

 

[[email protected]
testDir]$ echo $[var+1]

  \NNN    八进制值为NNN 的字符(1 至3 个数位)

20130305

  \\        反斜杠

 

  \a        终端鸣响

tr、变量、运算以及终端特性的设置等
使用tr的-s选项去除重复出现的字符: www.2cto.com
[[email protected]
tr.folder]$ cat oops.txt And the coww…

  \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:]    所有的十六进制数

  [=字符=]    所有和指定字符相等的字符

 

仅在SET1 和SET2 都给出,同时没有-d 选项的时候才会进行替换。

仅在替换时才可能用到-t 选项。如果需要SET2
将被通过在末尾添加原来的末字符的方式

补充到同SET1 等长。SET2 中多余的字符将被省略。只有[:lower:]
和[:upper:]

以升序展开字符;在用于替换时的SET2 中以成对表示大小写转换。-s
作用于SET1,既不

替换也不删除,否则在替换或展开后使用SET2 缩减。

 

例子:

C代码  

[[email protected]
zhangy]# echo “TANK” |tr A-Z a-z   #大写字母转小写  

tank  

  

[[email protected]
zhangy]# echo ‘tank zhang’ | tr a-z A-Z    #小写字线转大写  

TANK ZHANG  

  

[[email protected]
zhangy]# cat aaa.txt       #原文件  

aaa  

  

bbb  

  

[[email protected]
zhangy]# cat aaa.txt|tr ‘a’ ‘c’     #字母c替换字母a  

ccc  

  

bbb  

  

[[email protected]
zhangy]# cat aaa.txt|tr -d ‘a’    #删除所有字母a  

  

  

bbb  

  

[[email protected]
zhangy]# cat aaa.txt|tr -d ‘\n\t’  
删除文件file中出现的换行’\n’、制表’\t’字符  

aaabbb  

  

[[email protected]
zhangy]# cat aaa.txt|tr -s [a-zA-Z]   #删除重复的字母  

a  

  

b  

  

[[email protected]
zhangy]# cat aaa.txt|tr -s ‘\n’    #删除空行  

aaa  

bbb  

  

[[email protected]
zhangy]# cat aaa.txt |tr -s ‘\011’ ‘\040’  
#用空格符\040替换制表符\011  

aaa  

  

bbb  

可以把tr看作为一个简化的sed工具,tr表示为:translate。tr命令主要用于实现以下两个功能
替换操作的字符串转换。 删除…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website