text / tr === ###### tags: `OS / Ubuntu / cmd / text` ###### tags: `OS`, `Ubuntu`, `linux`, `command`, `text`, `tr` <br> [TOC] <br> :::info ### 🧵 text / tr - tr 是屬於 **文字轉換工具(text transformation tool)** - 用途為:**逐字元轉換(translate)、刪除(delete)、壓縮(squeeze)** - 適合處理:**簡單、線性的字元級處理**,如大小寫轉換、刪除空白、字元替換等 ::: <br> ## 討論 ### `tr '[:upper:]' '[:lower:]'` 這指令用法如何拆解? - ### gpt-4o (2025/05/12) 這個指令是 `tr`(translate)指令的用法,它將文字中的 **大寫字母轉為小寫字母**。以下是詳細拆解: --- ### 📌 完整指令 ``` tr '[:upper:]' '[:lower:]' ``` --- ### ✅ `tr` 指令簡介 `tr` 是 Linux 中用來**字元替換、壓縮、刪除**的工具,全名是 **translate**。 語法: ``` tr [OPTION] SET1 [SET2] ``` --- ### ✅ `[:upper:]` 是什麼? 這是 POSIX 定義的「字元類別(character class)」,代表: - `[:upper:]`:**所有大寫英文字母 A-Z** - `[:lower:]`:**所有小寫英文字母 a-z** --- ### ✅ 套用結果是什麼? 把輸入的每一個字元,**如果是大寫字母,就轉成對應的小寫字母**。 🔹範例: ``` echo "Hello GPU A40" | tr '[:upper:]' '[:lower:]' ``` 🔸輸出: ``` hello gpu a40 ``` --- ### 🧠 額外補充:為何不用 `'A-Z' 'a-z'`? 你也可以寫成: ``` tr 'A-Z' 'a-z' ``` 但這在某些非英文語系環境(如 UTF-8 / 多語系 LC_ALL)下可能會失效或產生預期外結果。而使用 `[:upper:]` / `[:lower:]` 屬於更安全、具跨平台兼容性的寫法。 <br> ### tr 指令常見用法對照表 - ### gpt-4o (2025/05/12) ### tr 指令常見用法對照表 | 用法 | 說明 | 範例輸入 | 指令 | 輸出結果 | |------|------|---------|------|----------| | `A-Z` → `a-z` | 大寫轉小寫 | `HELLO GPU` | `tr 'A-Z' 'a-z'` | `hello gpu` | | `[:upper:]` → `[:lower:]` | 大寫轉小寫(更通用) | `HELLO GPU` | `tr '[:upper:]' '[:lower:]'` | `hello gpu` | | `a-z` → `A-Z` | 小寫轉大寫 | `hello gpu` | `tr 'a-z' 'A-Z'` | `HELLO GPU` | | `[:lower:]` → `[:upper:]` | 小寫轉大寫(更通用) | `hello gpu` | `tr '[:lower:]' '[:upper:]'` | `HELLO GPU` | | 刪除字元 | 用 `-d` 刪除指定字元 | `a b c d` | `tr -d ' '` | `abcd` | | 壓縮重複字元 | 用 `-s` 壓縮重複出現的字元 | `aaabbbbcc` | `tr -s 'a-z'` | `abc` | | 將空白轉為破折號 | 所有空格轉成 `-` | `a b c` | `tr ' ' '-'` | `a-b-c` | | 移除非字母數字 | 清除特殊符號 | `a#B@1$C` | `tr -cd '[:alnum:]'` | `aB1C` | | 清除換行變成單行 | 將多行變成一行 | 多行文字 | `tr -d '\n'` | 單行文字 | --- ### 補充:常見的 POSIX 字元類別 | 類別 | 說明 | 範圍 | |-------------|-----------|------------| | `[:upper:]` | 大寫字母 | `A-Z` | | `[:lower:]` | 小寫字母 | `a-z` | | `[:digit:]` | 數字 | `0-9` | | `[:alpha:]` | 英文字母 | `a-zA-Z` | | `[:alnum:]` | 字母與數字 | `a-zA-Z0-9` | | `[:space:]` | 空白符號 | 空格、tab、換行 | | `[:punct:]` | 標點符號 | `. , ! ? ; : …` 等 | --- ### 範例:合法 Kubernetes label 值格式轉換 ```bash echo "NVIDIA GeForce GTX 1080 Ti" \ | tr '[:upper:]' '[:lower:]' \ | sed -E 's/[^a-z0-9]+/-/g' \ | sed -E 's/^-+|-+$//g' ``` 輸出結果: ``` nvidia-geforce-gtx-1080-ti ``` <br> {%hackmd vaaMgNRPS4KGJDSFG0ZE0w %}
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up