考虑以下问题: 我们有一串从/ dev / urandom流出的随机字符,我们希望以这样的方式处理它,即我们将获得满足特定条件的恒定长度的字符串。 例如,如果我们运行以下命令5次,我们得到:
cat /dev/urandom |tr -dc A-Z5|head -c${1:-30}
DLZEZDATSTDN55BNVDSNRFSLRKHDGR
AVCRIE5OAFBUWZZYQYQWCTAZSNMQAA
HSTFN5AQNWILXMSZCBIGREPNCFGPDM
AZJNEUQRCDYSKXMQDUHVTOFEOAYPHF
ANFDWHHZHLAGXCPKWLQESSZLEZYNDC
现在,这些字符串符合我需要的条件,但只是部分。 对于前者我需要数字5在字符串中出现至少2次但不超过7次,并且任何字母不应出现超过10次。 我应该如何自定义上面的命令才能得到这个结果?
答案 0 :(得分:1)
使用GNU awk
处理:
awk -v FS="" '{
err=0;
for(i=1; i<=NF; i++) {
a[$i]++;
if ($i~/[A-Z]/ && a[$i]>10) { err=1; break }
}
if (!err && (2>a[5] || a[5]>7)) err=1
}
END{ if (!err) print }' <(cat /dev/urandom | tr -dc A-Z5 | head -c30)
FS=""
- 在这种情况下,记录中的每个字符都成为一个单独的字段只有满足所有条件时,上述内容才会打印随机字符串。
答案 1 :(得分:1)
使用带有OP所需过滤器的函数的Bash解决方案。
过滤器是字符5出现次数。我通过使用 tr 删除字符串上的所有内容,除了字符5,然后计算剩余的字符数。
grep -E'(。)(。 \ 1){10}'*是一个标准的正则表达式,以确保没有任何字符出现超过10次。
循环然后只接一个随机字,直到满足所有三个条件。当然可能需要一段随机时间。 :P
add_filter( 'woocommerce_is_purchasable', 'wpa_109409_is_purchasable', 10, 2 );
function wpa_109409_is_purchasable( $purchasable, $product ){
if( $product->get_price() >= 0 )
$purchasable = true;
return $purchasable;
}