我正在尝试制作一个小脚本作为此命令的包装器:
$ egrep target /usr/lusers/me/test/*test.txt
/usr/lusers/me/test/1test.txt:target
该目录包含名为1test.txt
和2test.txt
的文件,其中一个文件包含我想要查找的文字。
这是我的整个脚本,名为mygrep.sh
:
set -v
set -x
egrep "$1" '/usr/lusers/me/test/*test.txt'
这是输出:
$ ./mygrep.sh target
set -x
egrep "$1" '/usr/lusers/me/test/*test.txt'
++ egrep targ '/usr/lusers/me/test/*test.txt'
egrep: /usr/lusers/me/test/*test.txt: No such file or directory
注意'
输出中文件路径周围的set -x
,命令失败。
现在比较脚本的这种变化:
set -v
set -x
egrep "$1" '/usr/lusers/me/test/1test.txt'
请注意,唯一的区别是星号与文字文件名 输出:
$ ./mygrep.sh target
set -x
egrep "$1" '/usr/lusers/me/test/1test.txt'
++ egrep target /usr/lusers/me/test/1test.txt
target
扩展后没有单引号,命令有效。
那么为什么在有星号的情况下会添加这些单引号,为什么在这种情况下命令失败?
答案 0 :(得分:2)
randomstring = ShowConnString(self.cframe).connstringtext
print(randomstring)
self.conn = pypyodbc.connect(randomstring)
#self.conn = pypyodbc.connect(driver='{SQL Server}', server='(local)', database='Audit', uid='sa', pwd='password')
产生的输出用于调试目的。参数中没有添加引号;它们仅用于显示目的。
正确的命令是set -x
,因为在将结果传递给egrep "$1" /usr/lusers/me/test/*.test.txt
之前,shell必须扩展模式(如果可能)。您没有名为egrep
的实际文件。
答案 1 :(得分:1)
全局字符必须在引号外(单引号或双引号),因为引号禁用通配符。
请改用:
egrep "$1" '/usr/lusers/me/test/'*'test.txt'
或者这个:
egrep "$1" "/usr/lusers/me/test/"*"test.txt"
或者,因为这个特定模式中没有任何内容会导致单词分裂(但如果事先不知道路径,那么这通常不是一种安全的方法):
egrep "$1" /usr/lusers/me/test/*test.txt