我遇到一个问题,当使用正则表达式模式清理 mysql 查询的某些输出时,sed 没有返回我期望的内容。
mysql -uroot -p -e 'SELECT `path` FROM db.media_gallery' | sed -n -r 's/[^\/]+([^\s]+).*/\1/p'
该查询返回一堆如下的行:
| /media/M/W/lmt_MWS04_8.png |
| /media/M/W/lmt_MWS02_11.png |
当我通过上面列出的 sed 命令传输此内容时,它返回以下内容:
//M/W/lmt_MWS04_8.png
//M/W/lmt_MWS02_11.png
“媒体”去哪儿了?为什么它会随机删除我的一部分字符串?
有谁知道如何修复我的正则表达式?
答案1
不需要 sed,真正的问题是你正在使用 mysql 的美化输出,这些输出是供人类使用而不是自动使用的。这是一项简单的任务,mysql 完全有能力完成。
mysql -N -s -r -uroot -p -e 'SELECT `path` FROM db.media_gallery'
将返回:
/media/M/W/lmt_MWS04_8.png
/media/M/W/lmt_MWS02_11.png
来自‘man mysql’:
--skip-column-names, -N
--silent, -s
--raw, -r
答案2
“media” 匹配“[^/]+”,因此它被括号中的内容替换。如果需要它,您需要在该正则表达式子句之前打开括号。