regex - 使用 sed 向后删除特定的空格
问题描述
我试图删除字符串中的最后一个空格。
输入是:
"hi guys how you doing"
我目前在做什么:
$ echo "hi guys how you doing" | sed 's/ \+//1'
电流输出:
"higuys how you doing"
预期输出:
"hi guys how youdoing"
这个字符串只是例如,在我的应用程序中,我不知道空格的确切位置,我只知道它在最后一个空白位置。
你知道它是否存在在没有 rev 命令的情况下向后搜索字符串的任何方法?
解决方案
您可以使用
sed 's/\(.*[^[:space:]]\)[[:space:]]\{1,\}/\1/'
sed 's/[[:space:]]\{1,\}\([^[:space:]]*\)$/\1/'
如果您的sed
支持\s
,\S
并且如果您更喜欢 POSIX ERE,您可以使用
sed -E 's/(.*\S)\s+/\1/'
sed -E 's/\s+(\S*)$/\1/'
查看sed
演示:
s="hi guys how you doing"
sed 's/\(.*[^[:space:]]\)[[:space:]]\{1,\}/\1/' <<< "$s"
# => hi guys how youdoing
细节
\(.*[^[:space:]]\)[[:space:]]\{1,\}
/(.*\S)\s+
在最后一个非空白字符之前尽可能多地匹配并捕获任何零个或多个字符到第 1 组,并匹配其后的 1 个或多个空白字符[[:space:]]\{1,\}\([^[:space:]]*\)$
/\s+(\S*)$
匹配 1+ 个空格,然后匹配并捕获字符串末尾的第 1 组零个或多个非空格字符。
推荐阅读
- opencv - find4QuadCornerSubpix 与cornerSubPix
- c++ - 我可以依靠 TCHAR 的定义来对我正在使用的字符集做出正确的假设吗?
- javascript - 有没有办法强制在同一路由中重新加载路由器视图组件?
- python-3.x - Pyspark,合并多个数据帧(外连接)并只保留一次出现的主键(基于两列/键连接)
- android - 添加 Google 地方 API 后项目同步失败
- ios - 我使用 UIAlertControllerStyleActionSheet 创建了一个 UIAlertController 然后添加了一些按钮,但提示我有布局问题
- c++ - 如何在 C++ 中排除 SFML 操纵杆?
- django - 计数并分组
- php - 找不到导航类
- javascript - 根据 num 值渲染多个项目,只渲染一个