Shell 如何在没有管道/变量/回音的情况下将大写字母表示为小写字母

Shell 如何在没有管道/变量/回音的情况下将大写字母表示为小写字母,shell,grep,pattern-matching,zgrep,Shell,Grep,Pattern Matching,Zgrep,如何将大写模式表示为小写模式,例如: zgrep 'MYPATTERN' *.gz 匹配:mypattern 无:管道、回声、文件或变量。E.x.: s="Hello World!" echo $s # Hello World! a=${s,,} zgrep "$a" *.gz 或 echo 'MYPATTERN' | sed -e 's/.*/\L&/g' #this line not tested zgrep -i 'MYPATTERN' *.gz #option -i

如何将大写模式表示为小写模式,例如:

zgrep 'MYPATTERN' *.gz
匹配:mypattern

:管道、回声、文件或变量。E.x.:

s="Hello World!" 
echo $s  # Hello World!
a=${s,,}
zgrep "$a" *.gz

echo 'MYPATTERN' | sed -e 's/.*/\L&/g'  #this line not tested
zgrep -i 'MYPATTERN' *.gz #option -i is to heavy

echo 'MYPATTERN' | sed -e 's/.*/\L&/g'  #this line not tested
zgrep -i 'MYPATTERN' *.gz #option -i is to heavy
目标是在日志文件中搜索一个简单的六边形字符串,但它们总是以大写形式给出,但以小写形式记录

收获是在共享删除服务器中进行的,在该服务器中编写函数并不是最好的。我在寻找一个干净的解决办法。这就是我避免使用管道和变量的原因


子命令是受欢迎的“``”,但其中没有管道或许多命令。

这是一组疯狂的限制。怎么样

zgrep "$(tr '[:upper:]' '[:lower:]' <<<"MYPATTERN")" *.gz

zgrep“$(tr'[:upper:][:lower:][:lower:][p>这可能会帮助您,但有一个管道

grep -o "string" yourfile | tr [:upper:] [:lower:] 

@anubhava不,它是复制和粘贴的。或者通过鼠标中键进行粘贴。将小型专用工具结合起来,每个工具都能很好地完成一件事,这就是“UNIX方式”“。要求一个工具能做你想做的一切,而不需要配置、选项或预处理或后处理……是不合理的,除非你想让这个工具成为一个通用编程语言解释器(并且它的参数包含代码)。(你根本不清楚“编写函数不是最好的”是什么意思。”。例如,如果您不知道如何通过ssh方便地传递一个函数以在远程系统上运行,那么这是一个在本网站上已经单独提出和回答的问题,因此,如果您明确说明了为什么您认为函数不起作用,我们可能会提供一个直接针对当前问题的答案。)@CharlesDuffy你所有的论证都没有意义。好吧,Linux是一个GNU Linux系统,有很多二进制文件可以帮助你达到目的。但这并不意味着你应该使用10个命令而不是2个。我的需求在这一点上是非常清楚的。我当然不理解你声称的需求。如果这10个命令是解释器内部的,但是E2都是外部的——需要
mkfifo()
fork()
exeve()
wait()
,等等——那么10在相关情况下的执行速度会快得多。在
-i
的情况下,您根本没有添加任何外部命令。搜索修复模式比任何组合都要轻。不知道"如果您正在寻找打火机,请添加
-F
option@RodrigoGurgel,一旦你了解了它的工作原理,它就不再那么精巧了——它创建一个临时文件,将内容写入该临时文件,将文件重定向为stdin,然后将其删除。使用带有参数扩展的变量更有效,即使你需要这样做是的,你明确不想要。@RodrigoGurgel,“更好”意味着更高效?绝对。“更好”意味着它符合你的任意约束?这不是我感兴趣玩的游戏。在搜索后执行
tr
意味着你得到的结果与你事先执行的结果非常不同。