![用於測試每個輸入行的標準 Unix/Linux 實用程式](https://rvso.com/image/1558044/%E7%94%A8%E6%96%BC%E6%B8%AC%E8%A9%A6%E6%AF%8F%E5%80%8B%E8%BC%B8%E5%85%A5%E8%A1%8C%E7%9A%84%E6%A8%99%E6%BA%96%20Unix%2FLinux%20%E5%AF%A6%E7%94%A8%E7%A8%8B%E5%BC%8F.png)
我正在編寫一個 Bash 腳本,它應該測試輸入中的每一行是否符合特定條件。
有沒有一種方法可以採用謂詞並將所有行減少到 0 或 1,這樣我就不必使用 Linux 發行版中常規標準或現成的實用程式自己編寫循環程式碼?
答案1
範例資料(我們想要包含“的所有行想”):
$ cat x
not this
want this
not that
want that
你可以使用awk
:
1
如果該行與正規表示式匹配,則列印 a/want/
0
如果該行不匹配,則列印 a
$ 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