$$
將被取代,以在$
make文件,所以sed的表達看起來像這樣:
s///
是替換命令。而分隔符並不需要在你的情況/
這是一個冒號(:
):
s:/[^/]*$::;
s:_[^/]*$::g
它與匹配模式,並與替換替換:
s/pattern/replacement/
;
是使用一個分隔符將同一個調用中的命令乘以sed。
所以基本上這是兩個替代品替代/[^/]*$
另一個替代品_[^/]*$
。
[...]
是一個字符類,它將匹配你曾經在那裏粘一次。例如:[abc]
將匹配a或b或c。如果^
在課程開始時會匹配所有內容,但該課程中的內容除外,例如:[^abc]
將匹配除a和b和c之外的所有內容。
*
將重複最後一次模式零次或多次。
$
是行結束
讓應用我們知道上面的例子(閱讀自下而上):
s:/[^/]*$::;
#^^^^^ ^^ ^^
#||||| || |Delimiter
#||||| || Replace with nothing
#||||| |End of line
#||||| Zero or more times
#||||Literal slash
#|||Match everything but ...
#||Character class
#|Literal slash
#Delimiter used for the substitution command
/[^/]*$
將匹配後面的一切,但斜線零字面斜槓(/
)或者更多次在行末。
_[^/]*$
將與字面下劃線(_
)相匹配,後面跟着一行,但在行尾有零次或多次斜線。
這是第一個,第二個留作練習。
所以「$」只會匹配最後一個字符串「/ ...」,並用空白替換。前面的將保持不變。另外,關於sed中的分隔符,允許使用哪些分隔符?從https://coderwall.com/p/khdkuw/delimiters-in-sed-substitution,它表示「sed可以使用任何字符作爲分隔符,事實上,它會自動使用s之後的字符作爲分隔符。」這是真的嗎? – pepero
我認爲一切都允許作爲分隔符:'echo「123」| sed's12131'。 '/ [^ /] * $'的行爲與dirname相同。從輸入字符串中刪除基本名稱。 – andlrc