我正在寻找一个bash脚本,它将使用通配符路径来搜索特定文件,一旦它发现文件名搜索文件内部然后替换它。bash脚本搜索文件,并替换如果使用通配符找到文件内的字符串
这里就是我已经把不已:
#!/bin/sh
PATH=${1}
FILENAME="$2"
SEARCHFOR="$3"
/usr/bin/clear
echo "Searching $PATH"
echo "For the file $FILENAME"
echo "With the string $SEARCHFOR"
echo "=========================="
echo " RESULTS "
echo "=========================="
/usr/bin/find $PATH -type f -name "$FILENAME" | /usr/bin/xargs /bin/grep -l "$SEARCHFOR"
我还没有添加更换,但是我想我会用SED替代grep来做到这一点,只是用grep用于测试目的。
有了上面的代码,我必须使用任何类型的通配符路径的引号。有没有解决的办法?
./script '/home/*/public_html' php.ini module.so
我在想也许使用参数,但有一种方法可以做到这一点。
我的最终目标是让bash脚本可以传递通配符路径或文件名,它会搜索该文件,一旦找到文件搜索特定术语并在发现后替换它。
听起来那么简单,它应该是但我敲我的头靠在桌上,因为它已经这么长时间,因为我已经与庆典搞砸... aaggghh帮助!
附注:定义'$ PATH'会覆盖由shell定义的'PATH'变量,该变量告诉它要查看哪些文件夹在运行命令时。例如,当你键入'python myscript.py'时,shell在'$ PATH'中搜索分号分隔的目录中的名为'python'的可执行文件并使用它 - 它不需要键入'/ usr/bin/python myscript.py'。通过覆盖它,您可能会破坏跟随定义的脚本部分。 TLDR:您应该考虑为变量使用不同的名称。 – jedwards
作为一个后续,这就是为什么你必须写'/ usr/bin/clear'而不是只是'clear'和William Pursell的答案背后的推理。 – jedwards