Sed

SED 是否試圖快速解決 moi(反向引用問題)?

  • October 24, 2018

我試圖從這一行中提取第三個子表達式:

#EXTRA_GROUPS="dialout cdrom floppy audio video plugdev users"

(是的,adduser.conf文件,對於那些好奇的人):

sed 's/\(EXTRA_GROUPS=\)\("\)\(.*\)\("\)/\3/' adduser.conf

雖然這確實有效並產生

#dialout cdrom floppy audio video plugdev users

(我已經#在表達式中留下了符號,所以請忽略),這個

sed 's/\(EXTRA_GROUPS=\)\("\)\(.*\)\("\)//3' adduser.conf

不會並保留文件原樣。

我確實意識到最後一個範例應該刪除第三個反向引用,但是當我用/sd/3(“replace 3rd subexpression with sd”) 修改命令時,它也沒有真正做任何事情。

我嘗試使用-n //poptions-all 執行命令以獲得相同的結果。

我在sedDebian Jessie 機器上使用 GNU 版本 4.2.2。

我是否錯過了我的核心公用事業“教育”的一些關鍵部分,或者我已經有一段時間沒有曬太陽了?

替換命令的/n 標誌s反向引用sed沒有任何關係。 \n

  • 例如,您將(在目前行)s/regex/string/3的第三個匹配項替換為.regex``string
  • 使用s/regex/\3/,您將第一個匹配項替換regex為第三個擷取組。
  • 使用s/regex/\3/3,您將第三個匹配項替換為第三regex個擷取組。

在這種情況下,我可能會選擇更簡單的東西,比如

sed 's/^.*EXTRA_GROUPS="\([^"]*\)".*$/\1/'

如果您不使用它,則擷取字元串的位是沒有用的。

引用自:https://unix.stackexchange.com/questions/355832