假设我想在文件中搜索以破折号开头的字符串,例如"-something"
:
grep "-something" filename.txt
但是,这会引发错误,因为grep
其他可执行文件以及内置程序都希望将其视为它们无法识别的命令行开关。有没有办法防止这种情况发生?
答案1
用于标记正则表达式模式grep
:-e
grep -e "-something" filename.txt
对于一般内置函数的使用--
,在许多实用程序中它标记“选项结束”(但在 GNU grep 中则不然)。
答案2
因为grep
您还可以通过使用简单的字符列表来更改正则表达式,使其实际上不以连字符开头:
grep '[-]something'
这个技巧^W方法传统上用于避免错误匹配ps
:
ps -f | grep myprog
# lists both the process(es) running myprog AND the grep process
# making it harder to do things like choose the right process to kill(1)
ps -f | grep '[m]yprog'
# lists only the 'real' processes because [m]yprog matches "myprog"
# but [m]yprog does NOT match "grep [m]yprog"
但在现代,仅使用pgrep
(或pkill
) 更容易。