簡體   English   中英

Sed 不是模式匹配

[英]Sed not pattern matching

我有一個包含這些文件的目錄:

abc12345abc
abc1234567abc
abc123456789abc

我想獲取其中包含 7 個數字的文件。 我需要通過 pipe 使用 sed 來執行此操作。 我認為這會起作用:

ls -l | sed -n '/[0-9]\{7\}/p'

它返回:

abc1234567abc
abc123456789abc

正則表達式沒有錨定。 abc123456789abc有一個正好 7 位數字的字符串,其中 3 個實際上34567891234567 、 2345678 和2345678 如果您想要不再匹配的文件名,則需要檢查前后的非數字。

sed -n '/[^0-9][0-9]{7}[^0-9]/p'

您想要匹配未包含在另一個數字中的七個數字。

您可以使用

sed -En '/(^|[^0-9])[0-9]{7}($|[^0-9])/p'

請參閱在線演示

細節

  • -E - 啟用 POSIX ERE 語法(現在,不需要轉義{x}間隔量詞)
  • (^|[^0-9]) - 字符串或非數字字符的開頭
  • [0-9]{7} - 七位數
  • ($|[^0-9]) - 字符串結尾或非數字字符。

腳本的第一條規則,不要解析 ls

如果您嘗試匹配目錄中的文件,請使用find ,這就是它的意思

find dir/ -regextype posix-extended -type f \
   -regex ".*[^[:digit:]][[:digit:]]{7}[^[:digit:]].*"

這可能對您有用(GNU sed):

sed '/[0-9]\{7\}/!d;/[0-9]\{8\}/d' file

如果沒有 7 個連續數字或更多,則刪除該行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM