日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux删除第二列为空_Linux之基本文本处理工具(二)

發布時間:2023/12/4 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux删除第二列为空_Linux之基本文本处理工具(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

四、按列抽取與合并cut

cut是一個選取命令,就是將一段數據經過分析,取出我們想要的。一般來說,選取信息通常是針對“行”來進行分析的,并不是整篇信息分析的。

1、命令格式:

cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]

2.使用說明:

cut 命令從文件的每一行剪切字節、字符和字段并將這些字節、字符和字段寫至標準輸出。 如果不指定 File 參數,cut 命令將讀取標準輸入。必須指定 -b、-c 或 -f 標志之一。

3主要參數:b?:以字節為單位進行分割。這些字節位置將忽略多字節字符邊界,除非也指定了?-n?標志。

-c?:以字符為單位進行分割。

-d?:自定義分隔符,默認為制表符。

-f?:與-d一起使用,指定顯示哪個區域。

#:?第#個字段

#,#[,#]:離散的多個字段,例如1,3,6

#-#:連續的多個字段,?例如1-6

混合使用:?1-3,7

-n?:取消分割多字節字符。僅和?-b?標志一起使用。如果字符的最后一個字節落在由?-b?標志的?List?參數指示的
范圍之內,該字符將被寫出;否則,該字符將被排除。

4.cut定位方法:

cut命令主要是接受三個定位方法:

第一,字節(bytes),用選項-b

第二,字符(characters),用選項-c

第三,域(fields),用選項-f,與-d結合使用

實例一:以字節定位[root@bash?~]#?ll?re

-rw-r--r--?1?root?root?57?Jan??3?22:36?re

[root@bash?~]#?cat?re

one?apple?a?day!

two?apple?two?day!

tree

four

five

six

[root@bash?~]#?cut?-b?1,2,5-7?re

onapp

twapp

tr

fo

fi

si

實例二:以字符定位[root@bash?~]#?ll?re

-rw-r--r--?1?root?root?57?Jan??3?22:36?re

[root@bash?~]#?cat?re

one?apple?a?day!

two?apple?two?day!

tree

four

five

six

[root@bash?~]#?cut?-c?1,3,6-8?re

oeppl

toppl

te

fu

fv

實例三:以域定位[root@bash?~]#?head?-n3?/etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@bash?~]#?head?-n3?/etc/passwd?|?cut?-d:?-f?1,3,5-7

root:0:root:/root:/bin/bash

bin:1:bin:/bin:/sbin/nologin

daemon:2:daemon:/sbin:/sbin/nologinpaste

paste單詞意思是粘貼。該命令主要用來將多個文件的內容合并,與cut命令完成的功能剛好相反。粘貼兩個不同來源的數據時,首先需將其分類,并確保兩個文件行數相同。paste將按行將不同文件行信息放在一行。缺省情況下, paste連接時,用空格或tab鍵分隔新行中不同文本,除非指定-d選項,它將成為域分隔符。

1.命令格式:

paste [OPTION]... [FILE]...

2、常用選項:-d:??指定兩個文件的行合并后的分割符

-s:?將每個文件合并為一行,而不是按行進行合并

3、常見用法:paste?file1?file2?#將兩個文件的每行合并

paste?-d:?file1?file2?#將兩個文件的每行合并,分隔符為:

paste?-s?file1?file2?#將file1的內容合并為一行,將file2的內容合并為一行

實例:[root@bash?~]#?cat?a

aa

bb

cc

dd

ee

[root@bash?~]#?cat?b

xx

hh

cc

zz

ll

[root@bash?~]#?paste?a?b

aa??????xx

hh

bb??????cc

cc??????zz

dd??????ll

ee

[root@bash?~]#?paste?-d:?a?b???#使用冒號作為分隔符

aa:xx

:hh

bb:cc

cc:zz

dd:ll

ee:

[root@bash?~]#?paste?-s?a?b?#a文件合并一行,b文件合并一行

aa??????????????bb??????cc??????dd??????ee

xx??????hh??????cc??????zz??????lljoin

join將兩個文件中,指定欄位內容相同的行連接起來。

1.命令格式:join?[-i][-a<1或2>][-e][-o]?[-t][-v<1或2>][-1][-2][--help]?[--version][文件1][文件2]

2.命令參數:-a<1或2>???除了顯示原來的輸出內容之外,還顯示指令文件中沒有相同欄位的行。

-i或--igore-case???比較欄位內容時,忽略大小寫的差異。

-o???按照指定的格式來顯示結果。

-t???使用欄位的分隔字符。

-1???連接[文件1]指定的欄位。

-2???連接[文件2]指定的欄位。

3.命令說明:

默認連接是每個文件的第一個字段。

指定輸出字段: -o ... 其中FILENO=1表示第一個文件,FILENO=2表示第二個文件,FIELDNO表示字段序號,從1開始編號。默認會全部輸出,但關鍵字列只輸出一次。 比如:-o 1.1 1.2 2.2 表示輸出第一個文件的第一個字段、第二個字段,第二個文件的第二個字段。

使用示例

示例一 內連接(忽略不匹配的行)不指定任何參數的情況下使用join命令,就相當于數據庫中的內連接,關鍵字不匹配的行不會輸出。[root@rhel55?linux]#?cat?month_cn.txt

1???????一月

2???????二月

3???????三月

4???????四月

5???????五月

6???????六月

7???????七月

8???????八月

9???????九月

10??????十月

11??????十一月

12??????十二月

13??????十三月,故意的

[root@rhel55?linux]#?cat?month_en.txt

1???????January

2???????February

3???????March

4???????April

5???????May

6???????June

7???????July

8???????August

9???????September

10??????October

11??????????????November

12??????December

14??????MonthUnknown

注:注意兩個文件的內容,中文版的多了十三月,英文版的多了14月,這純粹是為了方便演示。[root@rhel55?linux]#?join?month_cn.txt?month_en.txt

1?一月?January

2?二月?February

3?三月?March

4?四月?April

5?五月?May

6?六月?June

7?七月?July

8?八月?August

9?九月?September

10?十月?October

11?十一月?November

12?十二月?December

[root@rhel55?linux]#

示例二 左連接(又稱左外連接,顯示左邊所有記錄)顯示左邊文件中的所有記錄,右邊文件中沒有匹配的顯示空白。[root@rhel55?linux]#?join?-a1?month_cn.txt?month_en.txt

1?一月?January

2?二月?February

3?三月?March

4?四月?April

5?五月?May

6?六月?June

7?七月?July

8?八月?August

9?九月?September

10?十月?October

11?十一月?November

12?十二月?December

13?十三月

[root@rhel55?linux]#

示例三 右連接(又稱右外連接,顯示右邊所有記錄)顯示右邊文件中的所有記錄,左邊文件中沒有匹配的顯示空白。[root@rhel55?linux]#?join?-a2?month_cn.txt?month_en.txt

1?一月?January

2?二月?February

3?三月?March

4?四月?April

5?五月?May

6?六月?June

7?七月?July

8?八月?August

9?九月?September

10?十月?October

11?十一月?November

12?十二月?December

14?MonthUnknown

[root@rhel55?linux]#

**示例四?全連接(又稱全外連接,顯示左邊和右邊所有記錄)**

[root@rhel55?linux]#?join?-a1?-a2?month_cn.txt?month_en.txt

1?一月?January

2?二月?February

3?三月?March

4?四月?April

5?五月?May

6?六月?June

7?七月?July

8?八月?August

9?九月?September

10?十月?October

11?十一月?November

12?十二月?December

13?十三月

14?MonthUnknown

[root@rhel55?linux]#

示例五 指定輸出字段'比如參數 -o 1.1 表示只輸出第一個文件的第一個字段。[root@rhel55?linux]#?join?-o?1.1?month_cn.txt?month_en.txt

1

2

3

4

5

6

7

8

9

10

11

12

[root@rhel55?linux]#?join?-o?1.1?2.2?month_cn.txt?month_en.txt

1?January

2?February

3?March

4?April

5?May

6?June

7?July

8?August

9?September

10?October

11?November

12?December

[root@rhel55?linux]#?join?-o?1.1?2.2?1.2?month_cn.txt?month_en.txt

1?January?一月

2?February?二月

3?March?三月

4?April?四月

5?May?五月

6?June?六月

7?July?七月

8?August?八月

9?September?九月

10?October?十月

11?November?十一月

12?December?十二月

[root@rhel55?linux]#?join?-o?1.1?2.2?1.2?1.3?month_cn.txt?month_en.txt???<==?字段1.3并不存在

1?January?一月

2?February?二月

3?March?三月

4?April?四月

5?May?五月

6?June?六月

7?July?七月

8?August?八月

9?September?九月

10?October?十月

11?November?十一月

12?December?十二月

[root@rhel55?linux]#

示例六:我們知道 /etc/passwd 第四個字段是 GID那個 GID 記錄在 /etc/group 當中的第三個字段,請問如何將兩個文件整合?[root@www?~]#?head?-n?3?/etc/passwd?/etc/group

==>?/etc/passwd?<==

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

==>?/etc/group?<==

root:x:0:root

bin:x:1:root,bin,daemon

daemon:x:2:root,bin,daemon

#?從上面可以看到,確實有相同的部分喔!趕緊來整合一下!

[root@www?~]#?join?-t?':'?-1?4?/etc/passwd?-2?3?/etc/group

0:root:x:0:root:/root:/bin/bash:root:x:root

1:bin:x:1:bin:/bin:/sbin/nologin:bin:x:root,bin,daemon

2:daemon:x:2:daemon:/sbin:/sbin/nologin:daemon:x:root,bin,daemon

#?同樣的,相同的字段部分被移動到最前面了!所以第二個文件的內容就沒再顯示。

五、文本分析wc

Linux系統中的wc(Word Count)命令的功能為統計指定文件中的字節數、字數、行數,并將統計結果顯示輸出。

1.命令格式:

wc [選項]文件...

2.命令功能:

統計指定文件中的字節數、字數、行數,并將統計結果顯示輸出。該命令統計指定文件中的字節數、字數、行數。如果沒有給出文件名,則從標準輸入讀取。wc同時也給出所指定文件的總統計數。

3.命令參數:-c?統計字節數。

-l?統計行數。

-m?統計字符數。這個標志不能與?-c?標志一起使用。

-w?統計字數。一個字被定義為由空白、跳格或換行字符分隔的字符串。

-L?打印最長行的長度。

-help?顯示幫助信息

--version?顯示版本信息

4.使用實例:

實例1:查看文件的字節數、字數、行數

命令:wc?test.txt

輸出:[root@localhost?test]#?cat?test.txt

hnlinux

peida.cnblogs.com

ubuntu

ubuntu?linux

redhat

Redhat

linuxmint

[root@localhost?test]#?wc?test.txt

7??8?70?test.txt

[root@localhost?test]#?wc?-l?test.txt

7?test.txt

[root@localhost?test]#?wc?-c?test.txt

70?test.txt

[root@localhost?test]#?wc?-w?test.txt

8?test.txt

[root@localhost?test]#?wc?-m?test.txt

70?test.txt

[root@localhost?test]#?wc?-L?test.txt

17?test.txt

說明:7?8?70?test.txt

行數 單詞數 字節數 文件名

實例2:用wc命令怎么做到只打印統計數字不打印文件名[root@localhost?test]#?wc?-l?test.txt

7?test.txt

[root@localhost?test]#?cat?test.txt?|wc?-l

7

說明:

使用管道線,這在編寫shell腳本時特別有用。

實例3:用來統計當前目錄下的文件數

命令:

ls -l | wc -l

輸出:[root@localhost?test]#?cd?test6

[root@localhost?test6]#?ll

總計?604

---xr--r--?1?root?mail??302108?11-30?08:39?linklog.log

---xr--r--?1?mail?users?302108?11-30?08:39?log2012.log

-rw-r--r--?1?mail?users?????61?11-30?08:39?log2013.log

-rw-r--r--?1?root?mail???????0?11-30?08:39?log2014.log

-rw-r--r--?1?root?mail???????0?11-30?08:39?log2015.log

-rw-r--r--?1?root?mail???????0?11-30?08:39?log2016.log

-rw-r--r--?1?root?mail???????0?11-30?08:39?log2017.log

[root@localhost?test6]#?ls?-l?|?wc?-l

8

[root@localhost?test6]#

說明:

數量中包含當前目錄sort

sort將文件的每一行作為一個單位,相互比較,比較原則是從首字符向后,依次按ASCII碼值進行比較,最后將他們按升序輸出。

1.命令格式:

sort [-fbMnrtuk] [file or stdin]

2.主要參數:-f??:忽略大小寫的差異,例如?A?與?a?視為編碼相同;

-b??:忽略最前面的空格符部分;

-M??:以月份的名字來排序,例如?JAN,?DEC?等等的排序方法;

-n??:使用『純數字』進行排序(默認是以文字型態來排序的);

-r??:反向排序;

-u??:就是?uniq?,相同的數據中,僅出現一行代表;

-t??:分隔符,默認是用?[tab]?鍵來分隔;

-k??:以那個區間?(field)?來進行排序的意思

實例一:對/etc/passwd 的賬號進行排序[root@www?~]#?cat?/etc/passwd?|?sort

adm:x:3:4:adm:/var/adm:/sbin/nologin

apache:x:48:48:Apache:/var/www:/sbin/nologin

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

sort 是默認以第一個數據來排序,而且默認是以字符串形式來排序,所以由字母 a 開始升序排序。

實例二:/etc/passwd 內容是以 : 來分隔的,以第三欄來排序[root@www?~]#?cat?/etc/passwd?|?sort?-t?':'?-k?3

root:x:0:0:root:/root:/bin/bash

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

bin:x:1:1:bin:/bin:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

實例三:默認是以字符串來排序的,如果想要使用數字排序:[root@www?~]#cat?/etc/passwd?|?sort?-t?':'?-k?3n

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

實例四:默認是升序排序,如果要倒序排序[root@www?~]#cat?/etc/passwd?|?sort?-t?':'?-k?3nr

nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

ntp:x:106:113::/home/ntp:/bin/false

messagebus:x:105:109::/var/run/dbus:/bin/false

sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin

實例五:如果要對/etc/passwd,先以第六個域的第2個字符到第4個字符進行正向排序,再基于第一個域進行反向排序。[root@www?~]#cat?/etc/passwd?|??sort?-t':'?-k?6.2,6.4?-k?1r

sync:x:4:65534:sync:/bin:/bin/sync

proxy:x:13:13:proxy:/bin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

實例六:查看/etc/passwd有多少個shell:對/etc/passwd的第七個域進行排序,然后去重:[root@www?~]#cat?/etc/passwd?|??sort?-t':'?-k?7?-u

root:x:0:0:root:/root:/bin/bash

syslog:x:101:102::/home/syslog:/bin/false

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologinuniq

uniq命令可以去除排序過的文件中的重復行,因此uniq經常和sort合用。也就是說,為了使uniq起作用,所有的重復行必須是相鄰的。

1.命令格式:

uniq [-idcu]

2.常用參數:-i:忽略大小寫字符的不同;

-c:顯示每行重復的次數

-u:只顯示唯一的行

-d:僅顯示重復過的行

實例:

a.直接刪除未經排序的文件,將會發現沒有任何行被刪除[root@www?~]#cat?testfile

hello

world

friend

hello

world

hello

[root@www?~]##uniq?testfile

hello

world

friend

hello

world

hello

b.排序文件,默認是去重[root@www?~]##cat?words?|?sort?|uniq

friend

hello

world

c.排序之后刪除了重復行,同時在行首位置輸出該行重復的次數[root@www?~]##sort?testfile?|?uniq?-c

1?friend

3?hello

2?world

d.僅顯示存在重復的行,并在行首顯示該行重復的次數[root@www?~]##sort?testfile?|?uniq?-dc

3?hello

2?world

e.僅顯示不重復的行[root@www?~]#sort?testfile?|?uniq?-u

frienddiff

diff 命令是 linux上非常重要的工具,用于比較文件的內容,特別是比較兩個版本不同的文件以找到改動的地方。

1.命令格式:diff[參數][文件1或目錄1][文件2或目錄2]

2.命令功能:diff命令能比較單個文件或者目錄內容。如果指定比較的是文件,則只有當輸入為文本文件時才有效。以逐行的方式,比較文本文件的異同處。如果指定比較的是目錄的的時候,diff 命令會比較兩個目錄下名字相同的文本文件。列出不同的二進制文件、公共子目錄和只在一個目錄出現的文件。

3.命令參數:-c? 顯示全部內文,并標出不同之處。

-u,-U或--unified=? 以合并的方式來顯示文件內容的不同。

-i:忽略大小寫

-b(--ignore-space-change):忽略空格的變化

-B(--ignore-blank-lines):比較時忽略空白行

-a:將比較的文件都當成純文本文件處理

-r:遞歸比較子目錄(如diff?-r?/etc/rc.d/rc3.d/?/etc/rc.d/rc5.d/比較兩個不同開機運行級別的目錄)

-N或--new-file? 在比較目錄時,若文件A僅出現在某個目錄中,預設會顯示:Only?in目錄:文件A若使用-N參數,則diff會將文件A與一個空白的文件比較。

-w或--ignore-all-space? 忽略全部的空格字符。

-W或--width? 在使用-y參數時,指定欄寬。

-y或--side-by-side? 以并列的方式顯示文件的異同之處。

4.diff說明:正常格式(normal?diff)

上下文格式(context?diff)

合并格式(unified?diff)

a、示例文件

為了便于講解,先新建兩個示例文件。

第一個文件叫做f1,內容是每行一個a,一共7行。a

a

a

a

a

a

a

第二個文件叫做f2,修改f1而成,第4行變成b,其他不變。a

a

a

b

a

a

a

b、正常格式的diff

現在對f1和f2進行比較:$?diff?f1?f2

這時,diff就會顯示正常格式的結果:4c4

---

>?b

第一行是一個提示,用來說明變動位置。4c4

它分成三個部分:前面的"4",表示f1的第4行有變化;中間的"c"表示變動的模式是內容改變(change),其他模式還有"增加"(a,代表addition)和"刪除"(d,代表deletion);后面的"4",表示變動后變成f2的第4行。

第二行分成兩個部分。

前面的小于號,表示要從f1當中去除該行(也就是第4行),后面的"a"表示該行的內容。

第三行用來分割f1和f2。---

第四行,類似于第二行。>?b

前面的大于號表示f2增加了該行,后面的"b"表示該行的內容。

最早的Unix(即AT&T版本的Unix),使用的就是這種格式的diff。

c、上下文格式的diff

上個世紀80年代初,加州大學伯克利分校推出BSD版本的Unix時,覺得diff的顯示結果太簡單,最好加入上下文,便于了解發生的變動。因此,推出了上下文格式的diff。

它的使用方法是加入c參數(代表context)。$?diff?-c?f1?f2

顯示結果如下:***?f1?2012-08-29?16:45:41.000000000?+0800

---?f2?2012-08-29?16:45:51.000000000?+0800

***************

***?1,7?****

a

a

a

!a

a

a

a

---?1,7?----

a

a

a

!b

a

a

a

這個結果分成四個部分。

第一部分的兩行,顯示兩個文件的基本情況:文件名和時間信息。***?f1?2012-08-29?16:45:41.000000000?+0800

---?f2?2012-08-29?16:45:51.000000000?+0800

"***"表示變動前的文件,"---"表示變動后的文件。

第二部分是15個星號,將文件的基本情況與變動內容分割開。***************

第三部分顯示變動前的文件,即f1。***?1,7?****

a

a

a

!a

a

a

a

這時不僅顯示發生變化的第4行,還顯示第4行的前面三行和后面三行,因此一共顯示7行。所以,前面的"*** 1,7 ****"就表示,從第1行開始連續7行。

另外,文件內容的每一行最前面,還有一個標記位。如果為空,表示該行無變化;如果是感嘆號(!),表示該行有改動;如果是減號(-),表示該行被刪除;如果是加號(+),表示該行為新增。

第四部分顯示變動后的文件,即f2。---?1,7?----

a

a

a

!b

a

a

a

除了變動行(第4行)以外,也是上下文各顯示三行,總共顯示7行。

d、合并格式的diff

如果兩個文件相似度很高,那么上下文格式的diff,將顯示大量重復的內容,很浪費空間。1990年,GNU diff率先推出了"合并格式"的diff,將f1和f2的上下文合并在一起顯示。

它的使用方法是加入u參數(代表unified)。$?diff?-u?f1?f2

顯示結果如下:---?f1?2012-08-29?16:45:41.000000000?+0800

+++?f2?2012-08-29?16:45:51.000000000?+0800

@@?-1,7?+1,7?@@

a

a

a

-a

+b

a

a

a

它的第一部分,也是文件的基本信息。---?f1?2012-08-29?16:45:41.000000000?+0800

+++?f2?2012-08-29?16:45:51.000000000?+0800

"---"表示變動前的文件,"+++"表示變動后的文件。

第二部分,變動的位置用兩個@作為起首和結束。@@?-1,7?+1,7?@@

前面的"-1,7"分成三個部分:減號表示第一個文件(即f1),"1"表示第1行,"7"表示連續7行。合在一起,就表示下面是第一個文件從第1行開始的連續7行。同樣的,"+1,7"表示變動后,成為第二個文件從第1行開始的連續7行。

第三部分是變動的具體內容。a

a

a

-a

+b

a

a

a

除了有變動的那些行以外,也是上下文各顯示3行。它將兩個文件的上下文,合并顯示在一起,所以叫做"合并格式"。每一行最前面的標志位,空表示無變動,減號表示第一個文件刪除的行,加號表示第二個文件新增的行。patch

實例:diff輸出補丁文件,patch給舊文件打補丁[root@bash?~]#?cat?f1

Hi,

Hello,

How?are?you?

I?am?fine,

Thank?you.

[root@bash?~]#?cat?f2

Hello,

Hi,

How?are?you?

I?am?fine.

[root@bash?~]#?diff?-u?f1?f2?>?diff.patch??#輸出不定文件

[root@bash?~]#?patch?-b?f1?diff.patch???#patch給f1打補丁并且備份原來文件

patching?file?f1

[root@bash?~]#?cat?f1

Hello,

Hi,

How?are?you?

I?am?fine.

六、文本字符轉換tr

tr用來從標準輸入中通過替換或刪除操作進行字符轉換。tr主要用于刪除文件中控制字符或進行字符轉換。使用tr時要轉換兩個字符串:字符串1用于查詢,字符串2用于處理各種轉換。tr剛執行時,字符串1中的字符被映射到字符串2中的字符,然后轉換操作開始。

1.命令格式:tr?-c|-d|-s?["string1_to_translate_from"]?["string2_to_translate_to"]?

2.命令選項:-c?用字符串1中字符集的補集替換此字符集,要求字符集為ASCII。

-d?刪除字符串1中所有輸入字符。

-s?刪除所有重復出現字符序列,只保留第一個;即將重復出現字符串壓縮為一個字符串。

-t或--truncate-set1:將第一個字符集對應字符轉化為第二字符集對應的字符

3.命令說明:

指定字符串1或字符串2的內容時,只能使用單字符或字符串范圍或列表。[a-z]?a-z內的字符組成的字符串。

[A-Z]?A-Z內的字符組成的字符串。

[0-9]?數字串。

\octal?一個三位的八進制數,對應有效的ASCII字符。

[O*n]?表示字符O重復出現指定次數n。因此[O*2]匹配OO的字符串。

實例一:將文件host中出現的"abc"替換為"xyz"[root@localhost?~]#?cat?host

:a?b?c?replace?e?f?g?replace?this?is?a?test?page?replace

[root@localhost?~]#?cat?host|tr?'abc'?'xyz'

:x?y?z?replxze?e?f?g?replxze?this?is?x?test?pxge?replxze

【注意】這里,凡是在host中出現的"a"字母,都替換成"x"字母,"b"字母替換為"y"字母,"c"字母替換為"z"字母。而不是將字符串"abc"替換為字符串"xyz"。

實例二:使用tr命令“統一”字母大小寫(小寫?-->?大寫)

[root@localhost?~]#?cat?host?|?tr?[a-z]?[A-Z]

:A?B?C?REPLACE?E?F?G?REPLACE?THIS?IS?A?TEST?PAGE?REPLACE

(大寫?-->?小寫)

[root@localhost?~]#?cat?host?|?tr?[A-Z]?[a-z]

實例二:把f1中0到9轉換為a到j[root@localhost?~]#?cat?f1

A?b?c?D

e?F?G?H?9?0?8?7?63

h?b?mfd?dgg

[root@localhost?~]#?cat?f1|tr?[0-9]?[a-j]

A?b?c?D

e?F?G?H?j?a?i?h?gd

h?b?mfd?dgg

實例三:刪除文件host中出現的"replace"字符[root@localhost?~]#?cat?host

:a?b?c?replace?e?f?g?replace?this?is?a?test?page?replace

[root@localhost?~]#?cat?host|tr?-d?'replace'

:?b????f?g??this?is??tst?g

【注意】這里,凡是在host文件中出現的'r','p','l','a','c','e'字符都會被刪除!而不是緊緊刪除出現的"replace”字符串。

刪除文件file中出現的換行'\n'、制表'\t'字符[root@localhost?~]#?cat?file?|?tr?-d?"\n\t"?>?new_file

不可見字符都得用轉義字符來表示的,這個都是統一的。

實例四:刪除“連續著的”重復字母,只保留第一個[root@localhost?~]#?cat?file?|?tr?-s?[a-zA-Z]?>?new_file

實例五:刪除空行[root@localhost?~]#?cat?file?|?tr?-s?"\n"?>?new_file

實例六:刪除Windows文件“造成”的'^M'字符[root@localhost?~]#?cat?file?|?tr?-d?"\r"?>?new_file

或者[root@localhost?~]#?cat?file?|?tr?-s?"\r"?"\n"?>?new_file

【注意】這里-s后面是兩個參數"\r"和"\n",用后者替換前者

實例七:用空格符\040替換制表符\011[root@localhost?~]#?cat?file?|?tr?-s?"\011"?"\040"?>?new_file

實例八:把路徑變量中的冒號":",替換成換行符"\n"[root@localhost?~]#?echo?$PATH?|?tr?-s?':'?'\n'

/usr/local/sbin

/usr/local/bin

/sbin

/bin

/usr/sbin

/usr/bin

/root/bin

實例九:刪除f1中除了數字換行之外的所有字符

[root@localhost?~]#?cat?f1

一月?????1

二月?????2

三月?????3

四月?????4

五月?????5

六月?????6

七月?????7

八月?????8

九月?????9

十月?????10

十一月???11

十二月???12

十三月???13

[root@localhost?~]#?tr?-cd?'[0-9]\n'?

1

2

3

4

5

6

7

8

9

10

11

12

13

實例十:利用ifconfig去ipv4地址

[root@localhost?~]#?ifconfig|tr?-cs?'[0-9].'?'\n'|sort?-ut?'.'?-k3n

127.0.0.1

192.168.1.255

192.168.1.8

255.255.255.0

實例十一:查出/tmp的權限用數字表示

[root@localhost?~]#?stat?/tmp?|?tail?-4|head?-1|tr?-s?'?'?':'|cut?-d:?-f2|tr?-dc?'[0-9]\n'

1777

實例十二:統計/etc/init.d/functions中每個單詞重復的個數

[root@localhost?~]#?cat?/etc/init.d/functions?|tr?-sc?'[:alpha:]'?'\n'|sort|uniq?-c|sort?-n

總結

以上是生活随笔為你收集整理的linux删除第二列为空_Linux之基本文本处理工具(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。