Sed
SED 是否試圖快速解決 moi(反向引用問題)?
我試圖從這一行中提取第三個子表達式:
#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 withsd
”) 修改命令時,它也沒有真正做任何事情。我嘗試使用
-n //p
options-all 執行命令以獲得相同的結果。我在
sed
Debian 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/'
如果您不使用它,則擷取字元串的位是沒有用的。