rpo*_*kij 0 regex awk grep sed
如何在第一次出现特定字符序列之前匹配所有字符grep?我正在寻找一种在Linux环境中完成此任务的方法,因为我可能会遗漏一些关键的grep功能点,所以我们也欢迎使用awkir 解决方案的想法sed.
该问题还涉及在单行中单独匹配所有出现的模式.
为了更好地了解情况,我们假设我们有一个命令
echo "word word" | grep -o 'w.*rd'
看起来直到序列的最后一次出现才匹配rd,所以当我们运行它时,我们得到:
word word
我真正想要的是:
word
word
Run Code Online (Sandbox Code Playgroud)
你需要在这里进行非贪婪的匹配,以便在第一次出现时停止.但由于grep默认情况下不支持非贪婪匹配,因此可以使用否定字符类:
echo "word word" | grep -o 'w[^r]*rd'
Run Code Online (Sandbox Code Playgroud)
如果你有GNU grep,那么你可以使用-P选项来启用Perl正则表达式语法.然后这会工作:
echo "word word" | grep -Po 'w.*?rd'
Run Code Online (Sandbox Code Playgroud)
您可以使用-E选项 ingrep来扩展正则表达式并使用.*?(非贪婪匹配):
echo "word word" | grep -Eo 'w.*?rd'
word
word
Run Code Online (Sandbox Code Playgroud)