命令:tr

来源:https://www.cnblogs.com/alongdidi/archive/2018/12/04/10063069.html
-Advertisement-
Play Games

參考資料:https://www.thegeekstuff.com/2012/12/linux tr command/ 簡介 tr命令用於轉換、刪除或者去除重覆字元。它從STDIN中讀取數據並且將其寫入SDTOUT。 因此它的用法是這樣的。從用戶鍵入的STDIN中讀取。 或者這樣的。通過輸入重定向來 ...


參考資料:https://www.thegeekstuff.com/2012/12/linux-tr-command/

簡介

tr命令用於轉換、刪除或者去除重覆字元。它從STDIN中讀取數據並且將其寫入SDTOUT。
因此它的用法是這樣的。從用戶鍵入的STDIN中讀取。

[root@C7 ~]# tr abc ABC
abcdefg
ABCdefg
aabbcc
AABBCC
def    
def

或者這樣的。通過輸入重定向來讀取文件的數據。

[root@C7 ~]# cat tr.txt 
abcdefg
aabbcc
def    
[root@C7 ~]# tr abc ABC < tr.txt 
ABCdefg
AABBCC
def

因為是寫入到STDOUT,因此不會修改作為STDIN的文件的內容。
它不支持直接將文件作為命令的參數傳入。

[root@C7 ~]# tr abc ABC tr.txt 
tr: extra operand ‘tr.txt’
Try 'tr --help' for more information.

語法格式

tr [OPTION]... SET1 [SET2]

轉換

如果SET1和SET2都指定了並且沒有-d選項。那麼tr就會將SET1中的每個字元按照位置一一替換為SET2中對應的每個字元。

1. 大小寫轉換

[root@C7 ~]# tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
zhangwenlong
ZHANGWENLONG
[root@C7 ~]# tr [:lower:] [:upper:]
zhangwenlong
ZHANGWENLONG
[root@C7 ~]# tr a-z A-Z
zhangwenlong
ZHANGWENLONG

2. 括弧轉換

括弧這類符號也可以進行轉換,不過要註意的是需要使用引號包裹。

[root@C7 ~]# cat tr.txt
{zhang} {wen} {long}
[root@C7 ~]# tr {} () < tr.txt
-bash: syntax error near unexpected token `('
[root@C7 ~]# tr '{}' '()' < tr.txt
(zhang) (wen) (long)
[root@C7 ~]# tr "{}" "()" < tr.txt
(zhang) (wen) (long)

預設情況下,是將轉換後的結果寫到STDOUT,可以通過輸出重定向至文件。
註意:這不會改變原文件。

[root@C7 ~]# cat tr.txt
{zhang} {wen} {long}
[root@C7 ~]# tr '{}' '()' < tr.txt > tr_new.txt
[root@C7 ~]# cat tr.txt 
{zhang} {wen} {long}
[root@C7 ~]# cat tr_new.txt 
(zhang) (wen) (long)

如果STDIN和STDOUT的文件是同一個的話,也無法達到像我們預期的那樣修改文件的效果。
反而會清空文件!!!

[root@C7 ~]# cat tr.txt 
{zhang} {wen} {long}
[root@C7 ~]# tr '{}' '()' < tr.txt > tr.txt 
[root@C7 ~]# cat tr.txt
[root@C7 ~]# wc -l tr.txt
0 tr.txt

3. 空格轉換製表符

註意,不僅僅是空格被轉換,末尾的換行符也被轉換了。

[root@C7 ~]# echo "This is for testing" | tr [:space:] '\t'
This    is  for testing [root@C7 ~]# 

通過這個例子比較直觀可以顯示了。

[root@C7 ~]# echo "This is for testing" | tr [:space:] 'L'
ThisLisLforLtestingL[root@C7 ~]#

4. 使用-s選項來壓縮重覆的字元

案例3中,如果空格的數量大於一個,那麼我們在轉換的時候,就會針對每一個連續且重覆的空格都進行轉換為製表符的操作,如下所示。

[root@C7 ~]# echo "This is for testing" | tr [:space:] '\t'
This    is  for testing [root@C7 ~]# 
[root@C7 ~]# echo "This  is  for  testing" | tr [:space:] '\t'
This        is      for     testing [root@C7 ~]#

通過-s選項,就會將連續且重覆的字元,僅識別為單個字元,然後進行轉換。

[root@C7 ~]# echo "This is for testing" | tr [:space:] '\t'
This    is  for testing [root@C7 ~]# 
[root@C7 ~]# echo "This  is  for  testing" | tr -s [:space:] '\t'
This    is  for testing [root@C7 ~]#

同樣的,可以將多個連續的空格轉換為單個空格字元。

[root@C7 ~]# echo "This    is    for    testing" | tr -s [:space:] ' '
This is for testing 

5. 使用-d選項刪除特定的字元

因為是刪除,所以在語法格式中,只需要SET1,不需要SET2。

[root@C7 ~]# echo "the geek stuff" | tr -d t
he geek suff
[root@C7 ~]# echo "my number is 89757" | tr -d [:digit:]
my number is

如果想要刪除文件中符合條件的行的話,那麼需要使用sed命令

6. 使用-c選項來獲取集合的補集

因為是數字的補集,所以末尾的換行符也被刪除了。

[root@C7 ~]# echo "my number is 89757" | tr -cd [:digit:]
89757[root@C7 ~]#

7. 刪除不可列印字元

第五行是三個空格,第六行是三個製表符。從結果來看,不可列印的字元應該是換行符和製表符。

[root@C7 ~]# cat tr.txt
zhangwenlong
ZHANGWENLONG
123456
!@#$%^
   
            
[root@C7 ~]# tr -dc [:print:] < tr.txt 
zhangwenlongZHANGWENLONG123456!@#$%^   [root@C7 ~]#

8.將文件中的所有行合併為一行

[root@C7 ~]# cat tr.txt
zhangwenlong
ZHANGWENLONG
123456
!@#$%^
   
            
[root@C7 ~]# tr -s '\n' ' ' < tr.txt 
zhangwenlong ZHANGWENLONG 123456 !@#$%^              [root@C7 ~]#

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、Spring Boot 入門 1、Hello World探究 1、POM文件 1、父項目 Spring Boot 版本仲裁中心: 以後我們導入依賴預設是不需要寫版本:(沒有在dependencies裡面管理的依賴自然需要寫版本號) 2、啟動器 spring-boot-starter-web: S ...
  • 有多種方式安裝jenkins 方式一、通過Tomcat發佈 安裝tomcat和jdk、maven1、安裝jdk環境jdk下載地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html( ...
  • ``` # 開啟防火牆 systemctl start firewalld.service # 防火牆開機啟動 systemctl enable firewalld.service # 關閉防火牆 systemctl stop firewalld.service # 查看防火牆狀態 firewall... ...
  • 本文最早發佈於我的51CTO博客,目前已遷移至博客園。 參考: "port的英文維基百科" ) 簡介 MAC地址定義了數據包的下一跳地址。 IP地址定義了數據包最終應該傳輸到哪台電腦上。 而埠(port)則定義了數據包中的數據應該由電腦上的哪個進程來接收。 埠是一種邏輯上的概念,用來識別一個 ...
  • 1. 部署cadvisor容器,用來收集host上的容器信息,該容器部署在需要收集容器信息的每一個主機上部署; docker run -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib ...
  • nRF52832 作為一個低功耗藍牙晶元,其數據發送發送速率一直都偏低(高就不叫低功耗了^_^),作為初學者在網上找了很多資料,終於找到通過修改ATT_MTU來提升發送速率的方法,最快能達到8.2KB/s,現在就分享出來 ...
  • 我們是中國人,所以通常在工作中我們的系統時間、時區、字元集會做相應調整 時區: #查看當前設置時區 cat /etc/timezone #列出所有時區 timedatectl list-timezones #設置時區 timedatectl set-timezone Asia/Shanghai 字元 ...
  • 最近在瞭解嵌入式方面的知識,就隨筆記錄一下: 查看Linux本機串口: 1、查看串口是否可用 可以對串口發送數據比如對com1口,echo /dev/ttyS02、查看串口名稱使用 ls -l /dev/ttyS* 一般情況下串口的名稱全部在dev下麵,如果你沒有外插串口卡的話預設是dev下的tty ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...