![用于测试每个输入行的标准 Unix/Linux 实用程序](https://linux22.com/image/1558044/%E7%94%A8%E4%BA%8E%E6%B5%8B%E8%AF%95%E6%AF%8F%E4%B8%AA%E8%BE%93%E5%85%A5%E8%A1%8C%E7%9A%84%E6%A0%87%E5%87%86%20Unix%2FLinux%20%E5%AE%9E%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
我正在编写一个 Bash 脚本,它应该测试输入中的每一行是否满足某些条件。
有没有办法采用谓词并将所有行减少到 0 或 1,这样我就不必使用 Linux 发行版中常规标准或随时可用的实用程序自己编写循环代码?
答案1
样本数据(我们希望所有包含“想“):
$ cat x
not this
want this
not that
want that
你可以使用awk
:
1
如果该行与正则表达式匹配,则打印/want/
0
如果行不匹配,则打印
$ cat x | awk '{if(match($0,/want/)){print 1}else{print 0}}'
0
1
0
1
或者尝试sed
:
- 将包含以下内容的行替换
1
为0
(否则它们将作为 传递1
) - 替换包含“想“与
1
- 将不是 a 的行替换
1
为 a0
$ cat x | sed -re 's/^1$/0/' -e 's/^.*want.*$/1/' -e 's/^[^1][^$].*$/0/'
0
1
0
1