sed中替換指令之前的模式有什麼用

sed中替換指令之前的模式有什麼用

這裡面有一個例子關聯關於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

第二個不會。

另外,第二個也會刪除最初的#.

相關內容