回覆列表
  • 1 # 使用者2586955584324

    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處理檔案的機制屬於從第一行開始讀,然後讀第二行,第三行...以此類推。

    所以這樣就能把每行的最後一個字元去掉。

  • 中秋節和大豐收的關聯?
  • 怎樣可以讓水果更長期的儲存?