Grep

Grep 正則表達式以查找包含字母/數字/破折號以外的其他內容的行

  • July 25, 2021

我需要一個正則表達式,它可以讓我進入 file.txt 行,其中包含的內容不僅僅是字母或/和數字和破折號。

file.txt 看起來像這樣

  zigzag-p
  100-ig
  inter-op

但它有 47k 行:) 所以在 file.txt 中我們可能會有

  a=opera
  a-10-b
  zigzag-p
  100-ig
  inter-op
  out&-yu

我需要一個正則表達式,它可以找到除數字和/或字母和破折號以外的所有行,理想情況下我可以與 grep 一起使用 :)

grep '[^[:alnum:]-]'

返回包含任何一個字元的行,該字元在區域設置中既不-分類也不分類為字母數字。

請注意,它不僅限於字母腳本的字母,還包括非字母腳本的單詞成分,例如中文或日文字元。它不包括組合變音符號,但這意味著將報告像Stéphane在後面的 U+0301 組合重音符號é表示的行。e

請注意,對於許多grep實現,只要所有有效字元都是 alnums 或-.

grep -vx '[[:alnum:]-]*'

(如果您希望它也報告空行,請將*(0 或更多)替換為(1 或更多))+

在某些grep實現的情況下會更好。使用 GNU grep,您可能需要添加該-a選項,以便即使它檢測到輸入不是有效文本,它也可以工作。

更一般地說,可移植性,文本實用程序無法保證您的輸入,例如grep當輸入不是有效文本時。這包括不構成有效字元的字節序列,還包括包含 NUL 字元的行或過長的行。

如果要限制為 POSIX 可移植字元集(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789)的 52 個字母和 10 位數字,可以將語言環境設置為C/ POSIX

LC_ALL=C grep '[^[:alnum:]-]'

這也有助於解決字元解碼問題,因為所有字節在 C 語言環境中形成一個有效(儘管可能未定義)字元。

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