Shell
grep:從給定位置開始匹配行(跳過前 n 個字元)
我的文件包含以下格式的行:
2021-Jan-26 05:35 foo bar 2 2021-Jan-26 05:37 asdf 2 foo bar 2021-Jan-26 05:37 foo
我感興趣的模式從位置 20 開始。所以當我 grep 文件以獲取特定模式時,我想跳過(不匹配)前 19 個字元。
所以,我想匹配行上任何地方的模式,除了前 19 個字元
在上面的範例中,如果我 grep for
2
,我只想匹配第 1 行和第 2 行。我該怎麼做
grep
?
使用 GNU 的選項
grep
,它將忽略前 19 個字元並僅匹配您需要的模式:grep -P "(?<=.{19})2" file
輸出:
2021-Jan-26 05:35 foo bar **2** 2021-Jan-26 05:37 asdf **2** foo bar
您實際上確實想匹配前 19 個,但將它們與“任何東西”匹配。
所以
grep '^....................*2'
有20個點。將
^
模式錨定到行的開頭。接下來的 19 個點每個匹配一個字元,實際上跳過了它們。然後來.*
匹配零個或多個字元,然後來2
匹配你想要的模式。您可以通過以下方式提高效率
grep '^..................[^2]*2'
匹配行首,然後是 19 個字元,然後是零個或多個不是
2
a 的字元2
。在這種情況下不會有任何顯著差異,但如果要搜尋的模式更精細,那麼這種優化可能會有很大幫助。