regex - \b 无法使用 sed 命令按预期工作
问题描述
我试图通过sed
仅使用来解决给我的一项任务。任务是:
给定信用卡号行,用星号(即*)屏蔽每个信用卡号的前几位,并在新行上打印屏蔽的卡号。每个信用卡号由四组以空格分隔的四位数字组成。例如,信用卡号 1234 5678 9101 1234 将被屏蔽并打印为 **** **** **** 1234。
我已成功使用以下命令。它按预期工作并打印所需的输出。
sed 's/\([0-9]\{4\}\s\)\{3\}\([0-9]\{4\}\)/**** **** **** \2/'
但是,我正在尝试另一种解决方案,\b
但它不起作用。我无法理解为什么它不起作用。\b
应该匹配单词之间的开头和空格。我知道它可以解决,\s
但我只想了解解决方案有什么问题\b
。
sed 's/\(\b[0-9]\{4\}\b\)\{3\}\([0-9]\{4\}\)/**** **** **** \2/'
注意:因为我有一个可行的解决方案。我只是想了解为什么我使用\b
的解决方案不起作用。
解决方案
\b
确实有效,gnu sed
但您的第二个正则表达式不正确。
你应该使用:
sed 's/\b\([0-9]\{4\}\s\)\{3\}\([0-9]\{4\}\)/**** **** **** \2/' file
或与-E
sed -E 's/\b([0-9]{4}\s){3}([0-9]{4})/**** **** **** \2/' file
请注意,第二个\b
应替换为\s
(whitespace),因为您的 inout 文本在数字之间有空格。
推荐阅读
- python - 从密集矩阵创建稀疏矩阵而不首先初始化密集矩阵
- python - 锁定失败!使用 pipenv 锁定 --clear
- python - 带有 Python 的 Visual Studio Code:“问题”不再起作用,可变颜色突然被禁用
- c++ - Cmake文件无法连接目录错误
- docker - Docker 中的 Kafka 服务器问题
- microsoft-dynamics - 将 Dynamics 365 联系人与 GAL 同步
- python - ValueError:x 和 y 必须具有相同的第一维,但具有形状 (32,) 和 (30,)
- r - RStudio 经常尝试自动完成的代码片段库是什么?
- laravel - 在 Jenkins 管道中运行“docker-compose run --rm composer update”不起作用
- sql - SQL 表阻止我添加外键