Linux中國

在 Linux 命令行中轉換大小寫

有很多方法可以在 Linux 命令行中將文本從小寫更改為大寫,反之亦然。實際上,有一組這樣的命令可以選擇。這篇文章檢驗了一些最佳的命令來完成這項工作,以及你該如何讓它們正常工作。

使用 tr

tr(translate)命令是在命令行或腳本中最容易使用的命令之一。如果你要確定要一串大寫字元串,你只需將它傳給 tr,如下所示:

$ echo Hello There | tr [:lower:] [:upper:]
HELLO THERE

下面是一個在腳本中使用這個命令的例子,當你要確保添加到文件中的所有文本都使用大寫形式以保持一致性時(LCTT 譯註:這裡輸入部門名稱作為示例):

#!/bin/bash

echo -n "Enter department name: "
read dept
echo $dept | tr [:lower:] [:upper:] >> depts

將順序切換為 [:upper:] [:lower:] 會產生相反的效果,將所有大寫的部門名稱都轉換為小寫:

echo $dept | tr [:upper:] [:lower:] >> depts

同樣,你可以使用 sed 命令的 A-Za-z 字元串完成相同的操作:

echo $dept | tr a-z A-Z >> depts

毫無疑問,反轉 a-zA-Z 字元串的順序將產生相反的效果,將文本全部變為小寫。

使用 awk

awk 命令可讓你使用它的 touppertolower 選項執行相同的操作。上例腳本中的命令可以用這種方式代替:

echo $dept | awk '{print toupper($0)}' >> depts

相反操作(切換為小寫)如下所示:

echo $dept | awk '{print tolower($0)}' >> depts

使用 sed

sed(stream editor)命令也可用於切換大小寫。它與上面顯示的兩個命令中的第一個具有相同的效果。

echo $dept | sed 's/[a-z]/U&/g' >> depts

從大寫字母切換到小寫字母只需將行尾附近的 U 替換為 L

echo $dept | sed 's/[A-Z]/L&/g' >> depts

操作文件中的文本

awksed 都能更改整個文件的文本大小寫。因此,你發現你的老闆需要所有部門名稱的小寫么?沒問題。只需帶上文件名運行以下命令:

$ awk '{print tolower($0)}' depts
finance
billing
bookkeeping

如果要覆蓋 depts 文件,而不僅僅是以小寫形式顯示,則需要執行以下操作:

$ awk '{print tolower($0)}' depts > depts-
$ mv depts- depts

但是,使用 sed 進行更改,你可以避免最後一步,因為 sed 可以「原地」編輯文件,如下所示,文件完整,但文本全部小寫:

$ sed 's/[A-Z]/L&/g' depts

僅將首字母轉換為大寫

要僅將字元串中單詞的首字母轉換為大寫,那麼可以執行以下操作:

$ echo design & engineering| sed -e "s/b(.)/u1/g"
Design & Engineering

該命令將確保首字母大寫,但不會更改其餘字母。

確保只有首字母大寫

當要更改文本以使只有首字母大寫時,這更具挑戰性。假設你正在處理一個工作人員姓名列表,並且希望以正常的「名 姓」方式對其格式化。

使用 sed

你可以使用更複雜的 sed 命令來確保以下結果:

$ echo design & ENGINEERING | sed 's/b([[:alpha:]])([[:alpha:]]*)b/u1L2/g'
Design & Engineering

使用 Python

如果你已安裝 Python,你可以運行這樣的命令,它還可以設置文本格式,以便每個單詞只有首字母大寫,並且它可能比上面顯示的 sed 命令更易於解析:

$ echo -n "design & engineering" | python3 -c "import sys; print(sys.stdin.read().title())"
Design & Engineering

有多種方法可以在大小寫之間更改文本格式。哪種方法效果最好取決於你要處理的是單個字元串還是整個文件,以及想要的最終結果。

via: https://www.networkworld.com/article/3529409/converting-between-uppercase-and-lowercase-on-the-linux-command-line.html

作者:Sandra Henry-Stocker 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國