我有
[1] "000010004" "011120000" "002030000" "000300020" "003000020" "001000040" "000030020" "000010112"
[9] "050000000" "000000041" "001020020" "001030001" "001000130" "000000050" "000120020" "000500000"
使用grep我想找到包含
的所有组(“”是一个组内的字符串“)一个。子组2,3(意思是:...... 2 ...... 3 ......和...... 3 ...... 2 ......)
湾子组1,1,1,2(意思是:...... 1 ... 1 ... 1 ... 2和1 ... 1 ... 2 ... 1 ...等等)
顺序并不重要,但频率确实如此。 a)2和3的含义应该只出现一次。
感谢您的帮助
答案 0 :(得分:3)
这可以使用lookahead使用正则表达式完成,但不是很漂亮:
例如,为了匹配仅包含一个2
和一个3
的引用数字,您可以执行此操作(用于可读性的详细正则表达式):
" # quote
(?= # Assert that the following can be matched:
[^\D2]* # zero or more numbers except 2
2 # 2
[^\D2]* # zero or more numbers except 2
" # quote
) # End of lookahead
(?=[^\D3]*3[^\D3]*") # same for the number 3
(\d+) # one or more digits, capture the result
" # quote
准确匹配三个1
和一个2
:
" # quote
(?= # Assert that the following can be matched:
(?: # Match the following group:
[^\D1]* # zero or more numbers except 1
1 # 1
){3} # exactly three times.
[^\D1]* # Match zero or more numbers except 1
" # quote
) # End of lookahead
(?=[^\D2]*2[^\D2]*") # as above
(\d+) # one or more digits, capture the result
" # quote
我不知道这是否适用于标准grep
。
答案 1 :(得分:0)
我假设a. numbers 2,3
要匹配输入数组的以下条目
[3] "002030000"
[4] "000300020"
[5] "003000020"
[7] "000030020"
和b. numbers 1, 1, 1,2
您希望匹配以下条目
[2] "011120000"
[8] "000010112"
检查频率,你可能需要一些正则表达式与环视。如果可能的话,这是相当复杂的。
答案 2 :(得分:0)
首先,单独使用grep
是不可能的。
但您可以执行以下操作:
awk
中的这一点很简单。