regex - 我正在尝试使用包含 "awk"的 shell 脚本来针对文件运行

标签 regex linux shell ubuntu

read -p "Enter the name for the dealer you are searching for: " dealer
read -p "Enter the time of day you are checking for this dealer: " time
echo "$time $dealer" | awk '/$1/'
所以这就是我到目前为止所拥有的。根据我目前了解到的情况,这会将用户输入的值存储在 dealer 中。和 time .
我接下来要做的是echo该输入针对一系列命令,以查看文件是否包含这些输入。
例如,轮盘赌庄家“Billy”每隔一天在“05 AM”工作。要查看给定日期的数据是否包含他的工作日志,我将运行此脚本。
./script
运行文件:

Enter the name for the dealer you are searching for: Billy

Enter the time of day you are checking for this dealer: 05


现在这是我正在寻找解决方案的地方。调用脚本时是否对文件运行脚本?我是否让用户输入文件作为第三个参数,然后将其作为脚本内部的值?
如果我学得正确,那么经销商将被存储为 arg1 并由 $1 访问,时间为 $2。
那么我会运行:awk '1$.2$' file ?
这意味着它们之间可以有任何东西,但是如果一行确实包含名称和时间,那么这就是我要搜索的内容。

05:00:00 AM Katey Bean Billy Jones Evalyn Howell


这是我的脚本所需的输出,我知道时间排在第一位,所以我会相应地进行调整,但我正试图更进一步。

最佳答案

从标准输入中读取经销商和时间的输入后,您可以运行 awk使用以下正则表达式:

"^$time.*$dealer"
匹配文件中的行。 (您可能需要对其进行调整以适应您的需求,但作为起点应该就足够了)。
至于文件本身,awk可以从标准输入读取,因此您可以将文件重定向到脚本,如下所示:
./script < data.txt
并运行 awk像这样:
awk -v re="^$time.*$dealer" '$0 ~ re { print $0 }'
这样awk将从标准输入读取文件内容。
或者,您可以提供文件名作为参数,如下所示:
./script data.txt
并运行 awk像这样:
awk -v re="^$time.*$dealer" '$0 ~ re { print $0 }' "$1"
在哪里 $1是文件名。
您也可以使用对 grep 的等效调用。 (在这种情况下更简洁!):
grep "^$time.*$dealer" "$1"

关于regex - 我正在尝试使用包含 "awk"的 shell 脚本来针对文件运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65485801/

相关文章:

Javascript 正则表达式再次捕获

regex - 可以将一个捕获组的一部分捕获到第二个捕获组中吗?

linux - 巨大的 Oracle 重做日志

vim - 如何从 shell 脚本启动编辑器?

bash - 打开多个终端并执行不同命令的 Shell 脚本

PHP 正则表达式显示问题

regex - Powershell:匹配运算符返回 true 但 $matches 为 null

c - c mktime 在 Windows 和 GNU/Linux 上是否不同?

c++ - 头文件中定义的函数实现是否编译成静态库?

PHP - 如何保持命令 shell 打开以执行多个命令?