我有一个正则表达式,在文本文件中有几个匹配项。 我想只将匹配复制到第二个文件。我不想复制包含匹配项的行:我只想要匹配的文本。
我在notepad ++中找不到这样做的方法(只复制完整的行,而不仅仅是匹配)。也不在Visual Studio搜索中。
有没有办法只复制匹配?也许在grepp或sed?
答案 0 :(得分:8)
你可以用两者来做。假设我有一个以下文件 -
[jaypal:~/Temp] cat myfile
this is some random number 424-555
and my cell is 111-222-3333
and 42555 is my zip code
我想从 only numbers
myfile
sed
:使用sed
,您可以结合使用-n
和p
选项以及grouped pattern
。
sed -n 's/.[^0-9]*\([0-9-]\+\).*/\1/p'
| | | | | ||
--- ---------- -- |
| | | ---------> `p` prints only matched output. Since
V V V we are suppressing everything with -n
Suppress Escaped `(` \1 prints we use p to invoke printing.
output start the group first matched
you can reference group
it with \1. If you
have more grouped
pattern then they can
be called with \2 ...
[jaypal:~/Temp] sed -n 's/.[^0-9]*\([0-9-]\+\).*/\1/p' myfile
424-555
111-222-3333
42555
您只需将其重定向到另一个文件即可。
grep
:您可以使用 -
egrep -o "regex" filename
或
grep -E -o "regex" filename
来自手册页:
-E, --extended-regexp
Interpret PATTERN as an extended regular expression (see below).
-o, --only-matching
Show only the part of a matching line that matches PATTERN.
[jaypal:~/Temp] egrep -o "[0-9-]+" myfile
424-555
111-222-3333
42555
您只需将其重定向到另一个文件即可。
答案 1 :(得分:0)
这可能对您有用:
sed -n 's/^.*\(matched text regexp\).*/\1/w matched_text_file' source_file