grep
純粹用於行編號的副作用,因此-n
選項在這裏,所以主要是使用一個匹配所有輸入行的正則表達式。因此,.*
不是非常優雅 - ^
將工作,而不掃描每一行,而$
trivially匹配每一行以及。既然你知道輸入行不是空的,因此至少包含一個字符,簡單的正則表達式.
也可以完美工作。
但是,由於最終目標是執行行編號,更好的解決方案是使用專用工具來達到此目的。
... | sort | nl -ba -s '. '
的-ba
選項指定號碼的所有線路(默認是隻有一個行號添加到非空行;我們知道有沒有空行,所以在這裏不是絕對必要的,但它是很好的知道)和-s
選項指定要放在數字後面的分隔符字符串。
一個可能的小問題是行號格式是空白填充的,所以最後如果你特別想要無襯墊的數字,這個解決方案可能不適合你。 (但是一個sed
後處理程序要解決這個問題,比現在的grep
後處理程序簡單得多 - 只有sed 's/^ *//'
將刪除前導空格)。
...順便說一句,醜陋cat | grep | sed
管道可以縮寫爲剛剛
sed -n 's%[ \t]*<td>\([A-Z a-z]*\)</td><td>\([0-9]\{1,3\}\)/[0-9]\{2\}\([0-9]\{2\}\)</td>.*%\1 mi\3\2 %p' nastava.html
的cat
從來沒有必要擺在首位,而sed
腳本很容易被重構爲只打印時(您的grep
正則表達式與sed
腳本中的正則表達式不完全等價,但我認爲這是意圖)。另外,使用不同的分隔符可以避免反斜槓。
...當然,如果nastava.html
是您自己的網頁,整個過程是umop apisdn。你應該讓學生以機器可讀的形式出現,並從中產生一個網頁,而不是其他的方式。
不錯,'nl'過濾器!以前我總是用'cat -n'來做這件事。 – gboffi 2014-11-21 11:14:11