Text-Processing

grep -v 的 python 等價物是什麼?

  • December 20, 2018

我喜歡grep -v。我用它所有的時間。但是我也在用python做一些文本處理,我缺少一件關鍵的事情。

通常,我grep -v習慣於從文本中提取無關緊要的東西。

例如,

$ grep -v '[a-z]'
# (I manually review this output to confirm that I don't want those lines)

$ grep '[a-z]' > linesiwanted

但是如何匹配 Python 中正則表達式的補碼?例如, 的補碼\w

Python 中的正則表達式,無論是searchormatch方法,都返回一個對Match像或None. 對於grep -v等價物,您可以使用:

import re
for line in sys.stdin:
   if re.search(r'[a-z]', line) is None:
       sys.stdout.write(line)

或更簡潔地說:

import re; sys.stdout.writelines([line for line in sys.stdin if re.search(r'[a-z]', line) is None])

事實證明你可以使用

$$ ^a-z $$意思是grep -v [a-z]。 我像這樣使用它:

#!/usr/bin/env python
# coding=UTF-8

import sys, re

for file in sys.argv[1:]:
   f = open(file)
   string = f.read()
   regex = re.compile('[^a-z]')
   subs = regex.sub('', string)
   f.close()
   print subs

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