餐厅里的 Unix 程序员如何在菜单中寻找自己喜欢的菜品

2025-05-25

餐厅里的 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

到目前为止一切顺利。他使用awkNF变量(即可用的列字段数)对价格列进行筛选,以便获得包含价格的最后一列:

$ 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来检查价格是否小于10xargstest

$ cat menu.txt | grep shrimp | awk '{print $NF}' | sed -E 's/\$([0-9]+)\..*/\1/g' | xargs -I {} test {} -lt 10 

可是等等,没有输出!实际上,如果条件成立或不匹配,test则返回退出状态码。01

如果前一个命令成功, 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
PREV
了解跨域资源共享(CORS)
NEXT
TypeScript 以及为什么你应该在 JS 项目中使用 TypeScript 🥰 开发者们爱它 🚄 但是……为什么这么火?🤖 语法示例