find /etc -name aaa -exec cmd1 {}/; -exec cmd2 {}/;
儘管 basename 和 dirname
是非常好的工具,但有時可能需要執行更高階的字串「截斷」,而不只是標準的路徑名操作。當需要更強的說服力時,能利用 bash
內建的變數擴充套件功能。已使用了類似於 $ 的標準型別的變數擴充套件。不過 bash
自身也能執行一些便利的字串截斷。看一下這些例子:
第一種方法:
$ 從左向右擷取最後乙個string後的字串
$從左向右擷取第乙個string後的字串
$從右向左擷取最後乙個string後的字串
$從右向左擷取第乙個string後的字串
"*"只是個萬用字元能不要
在第乙個例子中,輸入了 $。他的確切含義是什麼?基本上,在 $ 中輸入環境變數名稱,兩個 ##,然後是萬用字元
("*fo")。然後,bash 取得 myvar,找到從字串"foodforthought.jpg" 開始處開始、且匹配萬用字元 "*fo"
的 最長 子字串,然後將其從字串的開始處截去。剛開始理解時會有些困難,為了感受一下這個特別的 "##" 選項怎麼工作,讓我們一步步地看看
bash 怎麼完成這個擴充套件。首先,他從 "foodforthought.jpg" 的開始處搜尋和 "*fo"
萬用字元匹配的子字串。以下是檢查到的子字串:
在搜尋了匹配的字串之後,能看到 bash 找到兩個匹配。他選擇最長的匹配,從初始字串的開始處除去,然後返回結果。
上面所示的第二個變數擴充套件形式看起來和第乙個相同,不過他只使用乙個 "#" -- 並且 bash 執行
幾乎同樣的過程。他檢視和第乙個例子相同的子字串系列,不過 bash 從初始字串除去 最短 的匹配,然後返回結果。所以,一查到 "fo"
子字串,他就從字串中除去 "fo",然後返回 "odforthought.jpg"。
這樣說可能會令人十分困惑,下面以一簡
單方式記住這個功能。當搜尋最長匹配時,使用 ##(因為 ## 比 # 長)。當搜尋最短匹配時,使用 #。看,不難記吧!等一下,怎樣記住應該使用
』#』 字元來從字串開始部分除去?非常簡單!注意到了嗎:在美國鍵盤上,shift-4 是 "$",他是 bash 變數擴充套件字元。在鍵盤上,緊靠
"$" 左邊的是 "#"。這樣,能看到:"#" 位於 "$" 的「開始處」,因此(根據我們的記憶法),"#"
從字串的開始處除去字元。你可能要問:怎麼從字串末尾除去字元。如果猜到我們使用美國鍵盤上緊靠 "$" 右邊 的字元
("%),那就猜對了。這裡有一些簡單的例子,解釋怎麼截去字串的末尾部分:
$ myfoo="chickensoup.tar.gz"
$ echo $
chickensoup
$ echo $
chickensoup.tar
正如你所見,除了將匹配萬用字元從字串末尾除去之外,% 和 %% 變數擴充套件選項和 # 和 ## 的工作方式相同。請注意:如果要從末尾除去特定子字串,不必使用 "*" 字元:
myfood="chickensoup"
$ echo $
chicken
在此例中,使用 "%%" 或 "%" 並不重要,因為只能有乙個匹配。還要記住:如果忘記了應該使用 "#" 還是 "%",則看一下鍵盤上的 3、4 和 5 鍵,然後猜出來。
第二種方法:$:擷取變數varible從n1到n2之間的字串。
能根據特定字元偏移和長度,使用另一種形式的變數擴充套件,來選擇特定子字串。試著在 bash 中輸入以下行:
$ exclaim=cowabunga
$ echo $
cow$ echo $
abunga
這種形式的字串截斷非常簡便,只需用冒號分開來指定起始字元和子字串長度。
應用字串截斷
字串處理 字串反轉
請原諒博主今天很閒,於是乎博主又開始更新微博了。這次要更新的問題是 編寫乙個函式,反轉乙個單詞的順序。例如 do or do not,there is no try.就要反轉成 try.no is there not,do or do 大家要認真看看這道題,這道題和大家想象的貌似有點不同。首先字串反...
字串處理
uncode與ansi字串轉換 我們使用windows函式multibytetowidechar將多位元組字串轉換成寬字元字串。函式如下 int multibytetowidechar uintcodepage dworddwflags lpcstrlpmultibytestr intcbmulti...
字串處理
byte array new byte 2 array system.text.encoding.default.getbytes 啊 int i1 short array 0 0 int i2 short array 1 0 unicode解碼方式下的漢字碼 array system.text.e...