Shell

grep:從給定位置開始匹配行(跳過前 n 個字元)

  • January 26, 2021

我的文件包含以下格式的行:

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 個字元,然後是零個或多個不是2a 的字元2。在這種情況下不會有任何顯著差異,但如果要搜尋的模式更精細,那麼這種優化可能會有很大幫助。

引用自:https://unix.stackexchange.com/questions/631019