餐厅里的 Unix 程序员如何在菜单中寻找自己喜欢的菜品
一位 Unix 程序员去附近的一家餐馆买午餐。他(或者更确切地说是 Bob)知道最好不要用眼睛手动浏览整个菜单,因为效率低下。Bob 知道有一种更好的方法可以自动化搜索他想吃的东西。
上次他来这里时,吃了一顿非常美味的意大利面和虾,价格不到 10 美元。
鲍勃想知道这道菜现在还能不能吃了。他打开运行 Linux 系统的笔记本电脑,把餐厅网站上的菜单抓取下来,保存成一个纯文本文件。
menu.txt
the menu
steak burrito $11.95
pasta and shrimp $9.75
caesar salad $6.50
现在 Bob 有了菜单,他搜索了grep
意大利面和虾的菜品:
$ cat menu.txt | grep shrimp
pasta and shrimp $9.75
到目前为止一切顺利。他使用awk
和NF
变量(即可用的列字段数)对价格列进行筛选,以便获得包含价格的最后一列:
$ cat menu.txt | grep shrimp | awk '{print $NF}'
$9.75
饥饿感袭来,他现在正疯狂地打字。Bob 继续sed
将美元金额转换为整数,方法是替换美元符号和小数点之间的所有内容。他将使用捕获组,并将内容替换为第一个捕获组\1
:
$ cat menu.txt | grep shrimp | awk '{print $NF}' | sed -E 's/\$([0-9]+)\..*/\1/g'
9
最后,使用方便的test
命令和小于标志,Bob 可以借助将值作为第一个参数传递给-lt
来检查价格是否小于:10
xargs
test
$ cat menu.txt | grep shrimp | awk '{print $NF}' | sed -E 's/\$([0-9]+)\..*/\1/g' | xargs -I {} test {} -lt 10
可是等等,没有输出!实际上,如果条件成立或不匹配,test
则返回退出状态码。0
1
如果前一个命令成功, Bob 只需使用 来回显可用内容,否则,如果前一个命令不成功,&&
他将使用双管道来回显:( :||
$ cat menu.txt | grep shrimp | awk '{print $NF}' | sed -E 's/\$([0-9]+)\..*/\1/g' | xargs -I {} test {} -lt 10 && echo 'Available!' || echo ':('
Available!
瞧!就是这个,想要的那份意面虾套餐仍然不到十块钱。鲍勃很高兴,继续点他最爱的菜。
(希望您喜欢这篇关于 unix 管道和 bash 命令的介绍文章!)
文章来源:https://dev.to/miguelmota/how-unix-programmers-at-restaurants-search-menus--46ad