
我正在編寫一個 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