我想使用正则表达式在文件中查找模式。那个模式可能在一条线的中间,但我不想要整条线。我试过了grep -a pattern file
,但这会返回包含正则表达式的整行。以下是我正在尝试做的一个例子。有谁知道这样做的方法?
示例:
输入:AAAAAAAAAAAAAXxXxXxXxBananasyYyYyYyYBBBBBBBCCCCCC
正则表达式:Xx.*yY
输出:XxXxXxXxBananasyYyYyYyY
答案 0 :(得分:11)
你很亲密,你需要-o
标志
grep -o 'Xx.*yY' <<<AAAAAAAAAAAAAXxXxXxXxBananasyYyYyYyYBBBBBBBCCCCCC
XxXxXxXxBananasyYyYyYyY
答案 1 :(得分:5)
使用-o
选项仅打印与正则表达式匹配的行部分
grep -o pattern file
答案 2 :(得分:1)
除grep -o
(最简单的方法)外,还有其他几种选择:
在bash
中,不依赖于grep
的任何特定实现:
$ regex='Xx.*yY'
$ [[ AAAAAAAAAAAAAXxXxXxXxBananasyYyYyYyYBBBBBBBCCCCCC =~ $regex ]]
$ echo ${BASH_REMATCH[0]}
XxXxXxXxBananasyYyYyYyY
使用expr
,这有点笨拙(部分原因是正则表达式隐式锚定在字符串的开头),但是由POSIX标准定义,所以它应该适用于任何POSIX平台,无论使用何种shell。
$ expr AAAAAAAAAAAAAXxXxXxXxBananasyYyYyYyYBBBBBBBCCCCCC : '[^X]*\(Xx.*yY\)'
XxXxXxXxBananasyYyYyYyY