所有,我试图运行一个sed
命令从特定文件中去除卡号。我试图以单线形式做到这一点,我认为一切进展顺利 - 但我意识到,如果我的第一个替代品不符合该模式,它会继续执行下一个命令。如果没有匹配,是否有办法让它退出?Sed - 如果模式不匹配,停止多部分命令?
我们的系统中有16-22个长度的卡号,所以我在考虑这个时考虑了可变长度。我的规格是保留任何16位数字的前6位和后4位,并在中间保留ax(星号)。
sed 'h;s/[0-9]\{6\}\([0-9]\{5\}\)\([0-9]*\)[0-9]\{4\}/\1\2/;s/./*/g;x;s/\([0-9]\{6\}\)[0-9]*\([0-9]\{4\}\)/\1\2/;G;s/\n//;s/\([0-9]\{6\}\)\([0-9]\{4\}\)\(.*\)/\1\3\2/'
的问题在于,如果命令的这部分事实:
s/[0-9]\{6\}\([0-9]\{5\}\)\([0-9]*\)[0-9]\{4\}/\1\2/
觉得没有什么,模式空间依然输入。它继续进入下一个命令,然后用星号代替所有的东西。我最终得到的是输入后跟着相同数量的星号(如果它不符合我的第一个替代品中的“卡号资格”)。如果它是什么被认为是一个可能的卡号,它是完美的。
任何想法?
什么是卡号?信用卡号? – tripleee
当需要sed中的if/unless'成语时,我发现'/ pattern/{s // replacement /; ....}或否定的'/ pattern /!{...}'可能非常有用。 – potong