**:
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 ~]#
Shell 獲取檔名和字尾名
file thisfile.txt echo filename echo extension 輸出 filename thisfile extension txt 附 基於pattern matching的子串替換 替換第乙個。替換所有。注意 不能使用正規表示式,只能使用?的shell擴充套件。只能...
shell獲取檔名和目錄名
憬薇15940人閱讀 2018 08 23 21 23 31 對檔名或目錄名進行處理,通常的操作是由路徑中提取出檔名,從路徑中提取出目錄名,提取檔案字尾名等等。例如,從路徑 dir1 dir2 file.txt中提取也檔名file.txt,提取出目錄 dir1 dir2,提取出檔案字尾txt等。下面...
批處理通過字串擷取得到檔名
當有乙個完整的檔案路徑時,如何擷取檔名呢,可以使用echo命令。如下 echo off set a e program files image line fl studio 9 fl.exe set b e program files image line fl studio 9 plugins v...