-
LS 仅支持通配符。
不支持正则表达式。
grep、sed 和 awk 命令支持常规模式。
在通配符中,* 表示任意数量的任意字符;
在正则表达式中,* 表示前面的字符重复任意次数(包括 0)。
这是一个不同的含义。
如果要使用正则表达式,可以使用管道将 ls 的结果发送到 grep 命令,即以下形式:
ls|grep ^dd*
指示匹配的字符串。
(如果希望文件名以字母 D 开头),因为 * 也与前一个 d 出现 0 次的情况匹配(即 d 在整个文件名中不出现一次),所以如果你要求 d 至少出现一次,你需要在这里写两个 d。
这也是有效的方法:
ls|egrep ^d+
指示前面的字符匹配 1 次或多次。
但是 grep 不支持 +,只能使用 egrep
-
地板主要区分通配符中的 * 和正则表达式中的 *,它们并不相同。 你的意思是在正则表达式中用 *。 另一方面,LS D* 是通配符的使用,它表示出现次数为 0 到多次的任何字符。
-
匹配任意数量的任意字符,而不仅仅是字符 d
如果要匹配 1 个字符,请使用。
和 * 是可以匹配任何字符的通配符。
-
用于匹配任意数量的字符(包括 0)。
-
你说的*的解释是正则表达式中的*。
shell 执行 glob 匹配和正则表达式的概念没有意义,glob 的具体匹配规则可以在网上搜索或参考 man bash 的内容。
-
符号的解释是:用前面的子表达式零次或多次,这是正则表达式中的解释,但ls不支持正则表达式。
* 在 ls 中表示任何字符。
知道了这一点,你应该知道为什么你不能得到你想要的结果。
-
楼上的bai是解决方案,但是不是很完整,也不是很确定执行脚本,主要是指zhi命令的执行,dao一般会在程序中判断,如果找到的话。
如果容忍线的命令执行不正确,脚本将被终止。
if [ ne 0 ]
然后,脚本将不正常地退出。
exit 1fi
-
与上述基本相同。
*“返回一个字符串,该字符串中包含多个外部空格。
@“ 返回多个字符串。
-
1、$0
0 表示此 bash 的文件名。
引用上一条指令的返回值。
指所有位置参数的内容:即调用 bash shell 的参数。
功能与 $* 基本相同。 只是“$* 返回一个字符串中有许多外部空格的字符串,而”$@返回多个字符串.
-
你好主题,通过使用-x参数进行调试,我发现你是这种形式,解释器会把管道字符放在字符串中"|"将它解释为一个普通字符,并在这里使用它就是被解释为 ls 的一个选项,因为 ls 没有"|"选项,因此会报告错误:
并且您希望将字符串放在"|"解释为管道,而不是字符串,您可以使用 eval 命令(这只是方法之一)。
注意:我们不仅将 echo 更改为 eval,而且命令后的反引号也更改为双引号,结果正如我们预期的那样,首先处理 ls -f,然后使用输出作为 grep 的输入:
希望能对题主有所帮助,欢迎提问。
-
如果你不报告你的错误,那就太奇怪了! 定义的选项有问题,命令-f是什么,管道是将上一个命令的输出传递给下一个命令,-f不是命令吧? 没有输出结果,因此会报错。
-
选项变量有问题。
Brother,你可以直接在同一磁盘下使用cd命令到达对应的当前,如果cd指定的目录不在自然驱动器中,则必须先切换驱动器才能到达对应的目录。 你最好在 cd 之前添加一个 c: 或 d:** >>>More