
這裡面有一個例子關聯關於sed
:
若要刪除所有以「#」開頭的行上的第一個數字,請使用:
sed '/^#/ s/[0-9][0-9]*//'
第一個模式()有什麼好處/^#/
?它可以簡單地是:
sed 's/^#[0-9][0-9]*//'
答案1
命令的一般格式sed
為
[address[,address]] function
當命令具有單一位址時,它對與該位址相符的所有行進行操作。當命令沒有位址時,它會在每一行上運行。
參考:POSIXsed
關於你的具體例子:
/^#/ s/[0-9][0-9]*//
該命令有一個位址
/^#/
,它會匹配所有以 開頭的行#
。替換模式是
/[0-9][0-9]*/
.這與行中出現的第一個數字序列相符。簡單的英文摘要:刪除以 開頭的每行中的第一個數字序列
#
。例子:
# non-digits|5555|non-digits|5555
變成# non-digits||non-digits|5555
s/^#[0-9][0-9]*//
由於沒有地址,因此該命令對每一行進行操作。
替換模式
/^#[0-9][0-9]*/
與前面帶有 a 的連續數字序列相匹配#
錨定的在該行的開頭。簡單的英文摘要:
#
從每行的開頭刪除後跟的數字序列(並且僅該模式)。例子:
#5555|non-digits|5555
變為|non-digits|5555
,但# non-digits|5555|non-digits|5555
由於替換模式不匹配而保持不變。
答案2
第一個將匹配並替換:
#abc99
第二個不會。
另外,第二個也會刪除最初的#
.