find
如果和grep
不可用,如何在 BusyBox 1.0 中递归搜索文件中的字符串?
(我想远程登录到路由器并找出iptables
规则的存储位置。)
BusyBox v1.00 (2011.01.13-12:30+0000) 内置shell (msh) 输入“help”以获取内置命令列表。 # 帮助 内置命令: ------------------- 。 :break cd continue eval exec exit exit 帮助登录 newgrp 读取只读设置班次时间陷阱 umask 等待 [ busybox cat chmod cp date dmesg echo expr false ftpget ftpput 主机名 ifconfig init insmod Kill Killall klogd linuxrc ln logger logread ls mkdir mknod mount msh mv ping ps pwd 重新启动 renice rm rmmod 路由 sed sendarp sh sysinfo syslogd 测试 tftp 顶部跟踪路由 true tty 卸载 vconfig wget
答案1
我滚动了这个脚本,它从当前目录进行递归模式搜索。它使用 busyboxsh
和sed
.使用busybox 1.17.1测试;您的里程可能会有所不同 1.00。
#!/bin/busybox sh
sed="busybox sed"
search_in()
{
searchterm="$1"
searchdir="$2"
prefix="$3"
(
cd "$searchdir"
for file in *
do
if [ -d "$file" ]
then
# recurse into subdirectory
search_in "$searchterm" "$file" "$prefix\\/$file"
else
# use sed like grep
$sed -rn '/'"$searchterm"'/s/(.*)/'"$prefix\\/$file"': \1/gp' "$file"
fi
done
)
}
# search for command-line search term, starting in current directory (`.`)
search_in "$1" . "."