sed
すべて、特定のファイルからカード番号を取り除くコマンドを実行しようとしています。私はこれをワンライナーで行おうとしていて、すべてうまくいっていると思いましたが、最初の代替がパターンと一致しなかった場合、次のコマンドに続くことに気づきました。一致するものがない場合に終了させる方法はありますか?
システムには16〜22の長さのカード番号があるので、可変長を念頭に置いてこれを作成しました。私の仕様では、16桁以上の数字の最初の6と最後の4を保持し、中央にあるものはすべて斧(アスタリスク)で囲みます。
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/
何も見つかりません。パターンスペースは入力のままです。次のコマンドに進み、すべてがアスタリスクに置き換えられます。最終的には、入力の後に同数のアスタリスクが続きます(最初の代用の「カード番号の資格」と一致しない場合)。それが可能なカード番号と見なされるものである場合、それは完全に機能します。
何か案は?