我正在编写一个 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