Bash
將所有字元替換為空格,直到它遇到第一個 /
這是字元串(它是 shell 變數的值):
2908104 /var/cache/yum/x86_64/7Server/Patches/gen
預期輸出:
/var/cache/yum/x86_64/7Server/Patches/gen
如何僅檢索從第一個 / 開始的值?我是 sed 的新手,只是 linux 的初學者。
通過在
grep
使用 Linux 作為核心的系統上常見的實現(在 RHEL 和其他通用 GNU/Linux 發行版上發現的 GNU,在大多數基於 Linux 的系統上發現的busybox,在 Android 上發現的 toybox),您可以執行以下操作:LC_ALL=C grep -o '/.*' <input
/
對於至少有一個的行,列印從第一行開始的行部分。POSIXly:
LC_ALL=C sed -n 's|^[^/]*/|/|p' <input
如果字元串儲存在類似 POSIX 的 shell 中的 shell 變數中(比如
sh
RHEL,它實際上bash
處於 POSIX 模式)。new_string=${string#"${string%%/*}"}
(
$new_string
如果$string
不包含任何內容將為空/
)
${string%%/*}
刪除匹配的最長後綴/*
。結果又被視為${string#pattern}
刪除與該模式匹配的最短前綴的模式。在這裡,正如${string%%/*}
引用的那樣,它被視為文字字元串而不是模式。使用
zsh
,您還可以執行以下操作:new_string=${(M)string%%/*}
使用
M
參數擴展標誌,所有那些${string#pattern}
(或##
,:#
,%
,%%
)運算符而不是刪除匹配部分,而是擴展到M
附加部分(沒有它會被刪除的部分)。您還可以刪除所有前導非/字元:
zsh
:set -o extendedglob new_string=${string##[^/]#}
ksh93
/bash -O extglob
:new_string=${string##*([^/])}
其中
X#
(zsh) 或*(X)
(ksh) 匹配 0 個或多個X
s,相當於X*
在grep
或sed
上面使用的正則表達式。¹ 通常嵌入在您的智能燈泡或電視或網路設備中,因此最終使用者很少與他們的外殼和實用程序進行互動。