echo 123456789 | sed -n "s/\(.*\)\(.\)/\1/g"
這種方法意思是sed分組匹配。怎麼分組呢?先看單引號裡的內容。
-n意思是隻顯示sed處理的行。如果後面跟的是檔案,則不會直接修改原始檔。會單獨加一行匹配到的行。然後單獨輸出加出來的這一行。
s///g 這是固定語法。匹配替換字串用的。s/後面這堆亂七八糟的是什麼意思呢?慢慢看
先看這個:\(.*\)\(.\)/
剛才說用法是分組匹配,分組關鍵字是用括號分組。
先看第一個分組(.*)。但是括號需要轉義,所以就變成了\(.*\) 這是第一個分組。裡面的內容是.*,即正則表示式中的點和星號,意為任意長度任意字串。也就是說如果我有1個字串用這個正則能匹配到,有100萬1000萬個字元也能匹配到。沒有也能匹配到哦。因為是任意長度。
第二個分組(.),同樣的,先把括號轉義。變成了\(.\)。裡面的內容同樣是正則表示式中的點。意思是任意一個字串,注意第二個分組和第一個分組所用的正則的區別。
這樣,我們就把123456789這個字串分割成了兩組。
第一組是:12345678
第二組是:9
接下來再看這個:/\1/g
第一個斜線是s///g裡面中間的斜線,屬於固定語法。\1的意思是第一個分組。也就是說這裡的\1就等於12345678,為什麼1前面要加上反斜線呢。如果不加這個反斜線,就會把匹配到的內容替換成了數字1,所以要加上反斜線轉義,告訴sed,我要輸出第一個分組。
g是全域性匹配。
組合起來看就簡單了,我先出輸出了123456789,然後用sed分組匹配。分兩組,第一組是12345678,第二組是9,然後輸出第一個分組。就能實現你說的如何去掉每行最後一個字元。
由於sed處理檔案的機制屬於從第一行開始讀,然後讀第二行,第三行...以此類推。
所以這樣就能把每行的最後一個字元去掉。
echo 123456789 | sed -n "s/\(.*\)\(.\)/\1/g"
這種方法意思是sed分組匹配。怎麼分組呢?先看單引號裡的內容。
-n意思是隻顯示sed處理的行。如果後面跟的是檔案,則不會直接修改原始檔。會單獨加一行匹配到的行。然後單獨輸出加出來的這一行。
s///g 這是固定語法。匹配替換字串用的。s/後面這堆亂七八糟的是什麼意思呢?慢慢看
先看這個:\(.*\)\(.\)/
剛才說用法是分組匹配,分組關鍵字是用括號分組。
先看第一個分組(.*)。但是括號需要轉義,所以就變成了\(.*\) 這是第一個分組。裡面的內容是.*,即正則表示式中的點和星號,意為任意長度任意字串。也就是說如果我有1個字串用這個正則能匹配到,有100萬1000萬個字元也能匹配到。沒有也能匹配到哦。因為是任意長度。
第二個分組(.),同樣的,先把括號轉義。變成了\(.\)。裡面的內容同樣是正則表示式中的點。意思是任意一個字串,注意第二個分組和第一個分組所用的正則的區別。
這樣,我們就把123456789這個字串分割成了兩組。
第一組是:12345678
第二組是:9
接下來再看這個:/\1/g
第一個斜線是s///g裡面中間的斜線,屬於固定語法。\1的意思是第一個分組。也就是說這裡的\1就等於12345678,為什麼1前面要加上反斜線呢。如果不加這個反斜線,就會把匹配到的內容替換成了數字1,所以要加上反斜線轉義,告訴sed,我要輸出第一個分組。
g是全域性匹配。
組合起來看就簡單了,我先出輸出了123456789,然後用sed分組匹配。分兩組,第一組是12345678,第二組是9,然後輸出第一個分組。就能實現你說的如何去掉每行最後一個字元。
由於sed處理檔案的機制屬於從第一行開始讀,然後讀第二行,第三行...以此類推。
所以這樣就能把每行的最後一個字元去掉。