是否可以编写与两个任意字符串完全匹配的POSIX BRE(不支持\|
)?假设您希望与this_string1_that
和this_string2_that
匹配this_\(string1\|string2\)_that
,而不是\|
。我想这会很丑陋,因为\(string1\)\{0,1\}\(string2\)\{0,1\}
匹配“string1string2”
编辑:也许string1 / string2不是最好的例子,因为它们很接近。重点是任意字符串,我正在寻找任何两个字符串的编码算法。
Edit1:找到与
匹配的BREthis_TWWXP6rfgMwRbuG6ugDAMohq3FaQsI1mwThL47JoQrdMvIWTUGTdXi6dGzTqfRs_that
this_oMfnmAwM8rKrsJniq5VGYFPs0EEBKKZgiHQhe5WXIVO8TieSspJ3GDnqpr8wDSU_that
答案 0 :(得分:1)
寻找这样的东西?
sed -n -e '/this_string1_that/p' -e '/this_string2_that/p' file
答案 1 :(得分:1)
使用基本POSIX(BRE)sed
,您可以使用:
/this_\(TWWXP...TqfRs\)\{0,1\}\(oMfn...8wDSU\)\{0,1\}_that/
我替换了字符串...
的中心,以便您可以看到命令的整体结构。您可以写出完整的字符串,或者将代码写出来。正则表达式也匹配this_Part1Part2_that
,但非恶意地输入的可能性几乎可以忽略不计。更严重的是,它会匹配this__that
,这与输入相比更不可信。您可以使用显示为主过滤器的模式;然后,您可以对外部标记之间的某些数据进行二次过滤:
/this_\(TWWXP...TqfRs\)\{0,1\}\(oMfn...8wDSU\)\{0,1\}_that/ {
/this_.\{63\}_that/ { ...process a genuine match... }
}
(我计算了琴弦的长度,得到了63而不是64,这让我感到非常惊讶。)
答案 2 :(得分:0)
不,它无法完成,有问题的sed也不支持{0,1}
。