我想編寫一個bash表達式來運行文件「a.out」,直到文件的輸出等於「b \ na」,其中「\ n」是一個新隊。運行文件,直到輸出與正則表達式匹配
回答
在這裏你去:
#/bin/bash
a.out | while :
do
read x
read y
[[ $x == 'b' && $y == 'a' ]] && break
echo $x $y
done
在bash測試了這個在Ubuntu 13.04。
這將重新運行'prog'多次,直到輸出完全是這兩行(並且我會使用case來進行比較)。我的理解是程序應該繼續運行,直到輸出中出現這兩行爲止。 OP,請澄清? – tripleee
我把這段代碼放在一個shell文件test.sh中並運行它。它一遍又一遍地輸出這行:「./sk.sh:line 6:prog:command not found」。我也有Ubuntu 13.04。 – Slazer
我的不好。 'prog'就是你的'a.out'。我假設你想一遍又一遍地運行你的代碼。看看你對Rishabh Sagar的評論的解釋,似乎你想在輸出遵循這種模式時可能會終止進程('a.out')。我對麼? – unxnut
喜歡的東西
./a.out | sed '/^b$/!b;:l;n;/^b$/bl;/^a$/q'
翻譯:如果當前輸入線不匹配^b$
與下一個輸入行重新開始(線,B,線的端部的開頭);否則,取下一個輸入行;只要我們得到另一個^b$
,繼續閱讀,否則,如果它匹配^a$
,停止閱讀並退出。
:l
聲明瞭一個標籤,所以我們有一個地方可以返回while循環。沒有顯式標籤的b
分支到腳本的末尾(然後從下一個輸入行開始)。
測試Ubuntu 13.04
pcregrep
匹配b\na
。 -m
標誌爲grep會導致它在第一次匹配時退出。
until ./a.out | pcregrep -M 'b\na' | grep -m 1 a; do :; done
這應該工作:
./a.out | while read line; do
[[ $s == 1 && $line == 'a' ]] && break
s=0
[[ $line == 'b' ]] && s=1
done
矯枉過正的方式:
mkfifo myfifo
./a.out > myfifo &
pp=$!
while read line; do
[[ $s == 1 && $line == 'a' ]] && break
s=0
[[ $line == 'b' ]] && s=1
done < myfifo
kill $pp
rm myfifo
是的,這個非矯枉過正的版本似乎工作。 – Slazer
- 1. 匹配,直到正則表達式表達不正確
- 2. 正則表達式與匹配+插件
- 3. Python文件正則表達式匹配
- 4. 正則表達式匹配文件名
- 5. 正則表達式匹配文件名
- 6. 正則表達式匹配的文件
- 7. 正則表達式文件名匹配
- 8. 正則表達式匹配文件名
- 9. 匹配正則表達式從文件
- 10. 與正則表達式匹配的正則表達式
- 11. Mysql的正則表達式:匹配與正則表達式
- 12. Ruby正則表達式與正則表達式匹配
- 13. 正則表達式匹配 - 輸出文件中的任何匹配字符
- 14. Python的正則表達式匹配,直到字符多行
- 15. Vim正則表達式:匹配直到空行
- 16. 刪除所有行,直到一些正則表達式匹配
- 17. 與Date.now的輸出匹配的正則表達式是什麼?
- 18. 匹配列表與正則表達式
- 19. 正則表達式匹配,直到給定的文本?
- 20. Perl正則表達式:多行匹配和輸出
- 21. 正則表達式匹配的錶行
- 22. preg_replace正則表達式 - 跳過與模式不匹配的行的輸出
- 23. 正則表達式匹配出現
- 24. 正則表達式匹配
- 25. 正則表達式匹配
- 26. 正則表達式匹配%
- 27. 正則表達式匹配
- 28. 正則表達式匹配
- 29. 正則表達式 - 匹配
- 30. 正則表達式匹配
能否請您發佈策略你到目前爲止嘗試過嗎?你是否面臨任何具體問題? –
我試圖運行「a.out」,它從main()中創建的線程中輸出main()和「b」中的「a」。大部分時間「b」都跟着「a」,但有時卻相反。你的戰略意味着什麼? – Slazer
你想證明線程執行是否(爲了我們的實際目的)是異步的?只是谷歌它有足夠的證據在那裏(和倒黴的問答網站充斥着爲什麼這樣的問題充斥...) – tripleee