命令: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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...