我想使用 echo 显示(不是内容)以至少 2 个字符开头但不能以“an”开头的目录
例如,如果目录中有以下内容:
a as an23 an23 blue
我只会
as blue
回来
我试过echo ^an*
了,但这也返回了 1 个字符的目录。
有什么办法我可以做到这一点的形式echo globalpattern
我想使用 echo 显示(不是内容)以至少 2 个字符开头但不能以“an”开头的目录
例如,如果目录中有以下内容:
a as an23 an23 blue
我只会
as blue
回来
我试过echo ^an*
了,但这也返回了 1 个字符的目录。
有什么办法我可以做到这一点的形式echo globalpattern
由于您希望名称中至少包含两个字符,因此您可以使用printf '%s\n' ??*
在单独的行上回显每个这样的名称。然后,您可以消除那些以 开头的名称an
,grep -v '^an'
从而导致:
printf '%s\n' ??* | grep -v '^an'
grep
在现代 shell的命令中,引号并不是绝对必要的。大约25 年以前,Bourne shell^
是 的同义词,|
所以我仍然在插入符号周围使用引号。
如果您绝对必须使用echo
而不是printf
,那么您必须将空格映射到换行符(假设您没有任何包含空格的名称)。
我正在尝试只使用 echo 命令,也没有 grep?
关于什么:
echo [!a]?* a[!n]*
a
第一项列出了所有不以;开头的两个加字符名称。a
第二个列出了第一个是第二个不是的所有双加字符名称n
。
这应该可以,但你可能会更好 ls 甚至找到:
echo * | tr ' ' '\012' | egrep '..' | egrep -v '^an'
Shell globbing 是正则表达式的一种形式,但它不如 egrep 正则表达式强大。