如何在EOF中使用grep输出,并隐藏grep输入仅使用其输出?
解决方法:用grep输出替代程序输入并隐藏原始输入
没问题,这是shell脚本里非常常见的需求,我给你几个简单实用的方案,完全能满足你的要求:
1. 直接用命令替换作为程序参数
如果你的程序是通过命令行参数接收输入的,用$(...)命令替换就能把grep的输出直接传给程序,程序根本接触不到grep的原始输入源。
比如假设你原本用./my_program 输入内容来运行程序,现在把grep的结果替换进去:
# 把grep的输出直接作为参数传给程序 ./my_program $(grep -o '[0-9.-]*' 你的原始文件.txt)
这里$(grep ...)会先执行grep命令,把它的输出捕获下来,然后作为参数传递给my_program,程序只会拿到那串数字,完全看不到你用来grep的原始文件。
2. 用管道传递标准输入
如果你的程序是通过**标准输入(stdin)**读取内容的,管道|是最直接的方式:
# grep的输出直接作为程序的标准输入 grep -o '[0-9.-]*' 你的原始文件.txt | ./my_program
管道会把前一个命令(grep)的标准输出,直接作为后一个命令(你的程序)的标准输入,程序全程只会处理grep过滤后的那串数字,原始输入文件对它完全不可见。
3. 在脚本内部存储grep输出(更灵活)
如果是在脚本里使用,你可以先把grep的输出存到变量里,再按需传给程序,这样更灵活:
# 先捕获grep的输出到变量 grep_result=$(grep -o '[0-9.-]*' 你的原始文件.txt) # 作为参数传递(注意双引号,避免空格拆分内容) ./my_program "$grep_result" # 或者作为标准输入传递 echo "$grep_result" | ./my_program
用双引号包裹变量"$grep_result"很重要,能保证grep输出的整串数字作为一个整体传给程序,不会被空格拆分成多个参数。
关键说明
不管用哪种方法,你的程序都只会接收到grep处理后的输出(也就是你给出的那串0.043532 -0.032964 1.960094 ...),完全无法访问grep读取的原始输入文件,完美实现你“隐藏grep输入”的要求。
内容的提问来源于stack exchange,提问作者Arshad Mehmood
相关产品推荐
相关产品推荐

