**:
file=」thisfile.txt」
echo 「filename: $」
echo 「extension: $」
輸出:filename: thisfile
extension: txt 附:
基於pattern matching的子串替換 $
替換第乙個。 $
替換所有。
注意:不能使用正規表示式,只能使用?*的shell擴充套件。只能用shell萬用字元如 * ? [list] [!list] [a-z]。 $
替換開頭。如果str以old串開頭,則替換。 $
替換結尾。如果str以old串結尾,則替換。
[user@laptop ~]# str=」hello world」
[user@laptop ~]# echo $
hello world
[user@laptop ~]# echo $
hello world
[user@laptop ~]# str=」hello world」
[user@laptop ~]# echo $
hello world
[user@laptop ~]# echo $
hello world
[user@laptop ~]# echo $
hello world
[user@laptop ~]# echo $
hello world
如果被替換串包含/字元,那麼要轉義,寫成\/。
[user@laptop ~]# filename=」/user/admin/monitoring/process.sh」
[user@laptop ~]# echo $
/tmp/admin/monitoring/process.sh
[user@laptop ~]# echo $
/user/admin/monitoring/process.ksh
[user@laptop ~]#
將環境變數path的各個目錄分開,每行顯示乙個。
echo -e $
[user@laptop ctmw]# echo $path
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/apache/apache-ant-1.7.1/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/user/bin
[user@laptop ctmw]# echo -e $
/usr/kerberos/sbin
/usr/kerberos/bin
/usr/apache/apache-ant-1.7.1/bin
/usr/local/sbin
/usr/local/bin
/sbin
/bin
/usr/sbin
/usr/bin
/user/bin
[user@laptop ctmw]# echo 「$」
/usr/kerberos/sbin
/usr/kerberos/bin
/usr/apache/apache-ant-1.7.1/bin
/usr/local/sbin
/usr/local/bin
/sbin
/bin
/usr/sbin
/usr/bin
/user/bin
基於pattern matching的子串刪除
子串刪除是一種特殊的替換 $
將str中第乙個sub子串刪除 $
將str中所有sub子串刪除 $
去頭,從開頭去除最短匹配字首 $
去頭,從開頭去除最長匹配字首 $
去尾,從結尾去除最短匹配字尾 $
去尾,從結尾去除最長匹配字尾
注意:經常會記錯#和%的含義,有乙個幫助記憶的方法
看一下鍵盤,#在$之前,%在$之後,就知道#去頭,%去尾。
注意:不能使用正規表示式,只能使用?*的shell擴充套件。
[user@laptop ~]# str=」hello world」
[user@laptop ~]# echo $
llo world
[user@laptop ~]# echo $
world
[user@laptop ~]# echo $
rld[user@laptop ~]# prefix=」*o」
[user@laptop ~]# echo $
world
[user@laptop ~]# echo $
rld[user@laptop ~]# echo $
hello w
[user@laptop ~]# echo $
hell
[user@laptop ~]# suffix=」o*」
[user@laptop ~]# echo $
hello w
[user@laptop ~]# echo $
hell
典型應用:得到檔案的副檔名
jpg使用sed命令實現正規表示式替換
使用sed命令可以進行正規表示式的替換。
echo 「$str」 | sed 「s/$old/$new/」
將str中的old子串替換成new。
[user@laptop ~]# str=」123456789″
[user@laptop ~]# echo 「$str」 | sed s/345/ok/
12ok6789
[user@laptop ~]# old=345
[user@laptop ~]# new=ok
[user@laptop ~]# echo 「$str」 | sed 「s/$old/$new/」
12ok6789
使用tr命令實現字元集合的替換
使用tr命令可以實現字元的替換,並且可以是從一批字元到另一批字元的替換。比如小寫字母變成大寫字母,或者反過來。
[user@laptop ~]# echo 「bash」 | tr 「[a-z]」 「[b-z]」
cbti
上面的命令是將原串中的a替換成b,被替換成c,以此類推。
網上問題:linux中 有沒有乙個命令可以將 字串中出現的 +或者- 替換成對應的-或者+ 即 「+」 ——> 「-」 「-」——>」+」 例如 gmt+8-9變成 gmt-8+9
[user@laptop ~]# echo 「gmt+8-9″ | sed 『s/-/#/g』 | sed 『s/+/-/g』 | sed 『s/#/+/g』
gmt-8+9
上面是網上提供的答案。如果用tr來實現,更簡潔些。
[user@laptop ~]# echo 「gmt+8-9″ | tr 「+-」 「-+」
gmt-8+9
路徑字串的處理
dirname $
取目錄部分。
basename $
取檔名部分。
basename $ $
取檔名部分,並且去掉指定的副檔名。
[user@laptop ~]# fullpath=/user/work/project/backup.tar.gz
[user@laptop ~]# dirname 「$fullpath」
/user/work/project
[user@laptop ~]# basename 「$fullpath」
backup.tar.gz
[user@laptop ~]# basename 「$fullpath」 .gz
backup.tar
[user@laptop ~]# basename 「$fullpath」 .tar
backup.tar.gz
[user@laptop ~]# basename 「$fullpath」 .tar.gz
backup
取目錄部分:$
(類似 dirname 「$fullpath」)
取檔名稱:file=$
(類似 basename 「$fullpath」)
取最短基本名稱:$
取最長基本名稱:$
取最短副檔名:$ 或者 $
取最長副檔名:$ 或者 $
[user@laptop ~]# fullpath=/user/work/project/backup.tar.gz
[user@laptop ~]# echo $
/user/work/project
[user@laptop ~]# dirname 「$fullpath」
/user/work/project
[user@laptop ~]# file=$
[user@laptop ~]# echo $file
backup.tar.gz
[user@laptop ~]# basename 「$fullpath」
backup.tar.gz
[user@laptop ~]# echo $
backup
[user@laptop ~]# echo $
backup.tar
[user@laptop ~]# echo $ gz
[user@laptop ~]# echo $
tar.gz
[user@laptop ~]#
檔名(字尾名)修改
就自己寫了段 來實現 檔名 字尾名 修改的小函式。剛開通部落格就把 放上來了。希望大俠看到指點一二。不勝榮幸!view code 1 2 修改檔名 3 4 原始檔全名 包括路徑 5 檔案字尾名 為空表示不修改 6 檔案後 為空表示不修改 7 返回異常訊息 8static void changeext...
Shell 字串處理 獲取檔名和字尾名
file thisfile.txt echo filename echo extension 輸出 filename thisfile extension txt 附 基於pattern matching的子串替換 替換第乙個。替換所有。注意 不能使用正規表示式,只能使用?的shell擴充套件。只能...
Python 獲取檔案的檔名和字尾名(副檔名)
我們可以使用os.path.splitext file 0 獲得檔名。我們可以使用os.path.splitext file 1 獲得以.為開頭的檔案字尾名。接下來我們看乙個例子 import os file hello world.py 獲取字首 檔名稱 print os.path.splitex...