Bash
轉義 [ 在 grep 中
我從標準輸入讀取字元串,我想顯示與字元串匹配的使用者。問題是,如果使用者輸入字元“[”或包含它的字元串。
grep -F
不起作用,因為該行必須以字元串開頭(^ - 這是一個帶有 -F 的簡單字元)。另外,getent $user
也不好,因為我也只需要使用者名而不是 id。if [[ "$user" == *"["* ]]; then echo -e "Invalid username.\n" continue fi if ! getent passwd | grep "^$user:"; then echo -e "Invalid username.\n" continue fi
這是’[‘的解決方法,還有其他方法嗎?
awk
最有可能完成這項工作,但我對此一無所知,我對 grep 感興趣。
要麼將其轉義,要麼將其放入字元類中,類似於以下內容:
grep '\[' grep '[[]' grep -e "${user//\[/\\\[}"
我們使用 shell 變數中的語法
${var//c/d}
=>替換$var
所有字元。現在,在您的情況下,is但它碰巧在這種語法中很特殊(它確實是萬用字元),因此我們需要通過在它前面加上反斜杠來轉義它,即.c``d``c``[``[``\[
現在來到替換部分,我們需要的是一個
\[
在那裡。但是同樣,在這種參數替換的語法中,兩者都是特殊的\
,因此兩者都需要,是的,你猜對了,反斜杠導致表達式::[``${var//...}``\\\[``"${var//\[/\\\[}"
高溫高壓