在 bash 中搜索时如何排除某些模式
how to exclude certain pattern when searching in bash
假设我有
abc-def1-xxx
abc-def2-yy-vv
abc-def3
abc-def4
我要输出abc-def3
和abc-def4
如果我使用模式 abc-def*
那么它会输出所有内容。
如果我搜索 abc-def*-*
那么它会输出前两个条目
我如何获得最后两个条目?
假设将数据放入文件中,data.txt
abc-def1-xxx
abc-def2-yy-vv
abc-def3
abc-def4
获取最后两行的命令是:
grep -E '*[0-9]$' data.txt
解释:
-E
,模式被解释为扩展的正则表达式。
*
:任意字符
[0-9]
: 一位数
$
:以$
之前的字符结束。所以在这里,表示字符串必须以数字结尾。
所以它查看 data.txt 中的行,并输出最后一个字符是数字的行,从 0 到 9。
您可以使模式更具体,匹配带有连字符的小写字符并在末尾匹配 1 个或多个数字
^
字符串开头
[a-z]\+
匹配 1+ 个字符 a-z
-
字面匹配
[a-z]\+
匹配 1+ 个字符 a-z
[0-9]\+
匹配 1+ 个数字
$
字符串结束
例如
echo "abc-def1-xxx
abc-def2-yy-vv
abc-def3
abc-def4" | grep '^[a-z]\+-[a-z]\+[0-9]\+$'
输出
abc-def3
abc-def4
您还可以匹配 abc-def
,然后匹配 1 个或多个数字:
^abc-def[0-9]\+$
假设我有
abc-def1-xxx
abc-def2-yy-vv
abc-def3
abc-def4
我要输出abc-def3
和abc-def4
如果我使用模式 abc-def*
那么它会输出所有内容。
如果我搜索 abc-def*-*
那么它会输出前两个条目
我如何获得最后两个条目?
假设将数据放入文件中,data.txt
abc-def1-xxx
abc-def2-yy-vv
abc-def3
abc-def4
获取最后两行的命令是:
grep -E '*[0-9]$' data.txt
解释:
-E
,模式被解释为扩展的正则表达式。*
:任意字符[0-9]
: 一位数$
:以$
之前的字符结束。所以在这里,表示字符串必须以数字结尾。
所以它查看 data.txt 中的行,并输出最后一个字符是数字的行,从 0 到 9。
您可以使模式更具体,匹配带有连字符的小写字符并在末尾匹配 1 个或多个数字
^
字符串开头[a-z]\+
匹配 1+ 个字符 a-z-
字面匹配[a-z]\+
匹配 1+ 个字符 a-z[0-9]\+
匹配 1+ 个数字$
字符串结束
例如
echo "abc-def1-xxx
abc-def2-yy-vv
abc-def3
abc-def4" | grep '^[a-z]\+-[a-z]\+[0-9]\+$'
输出
abc-def3
abc-def4
您还可以匹配 abc-def
,然后匹配 1 个或多个数字:
^abc-def[0-9]\+$