sed - 如何使用 sed 删除所有尾随 Q,但如果该行全是 Q,则不删除最后一个 Q
问题描述
我正在处理来自商业供应商的文件,该文件在每行末尾使用字母 Q 作为占位符。我需要删除每行末尾的所有 Q,除了它不应该从一行中删除所有内容。如果一行都是 Q,它应该留下一个 Q。
我使用此 sed 代码删除所有尾随 Q ......
line=$( echo $line | sed 's/Q*$//' )
...但它不处理行全是 Q 的情况,它应该留下 1 个 Q。当然,我可以用这段代码添加 Q 回来......
if [ -z "$line" ]; then
line="Q"
fi
...但我想学习如何完全在 sed 中处理这种情况以供将来参考。示例输出:
TESTQQQQQQ --> TEST
QQQ --> Q
解决方案
使用sed
:
sed 's/\(.\)Q*$/\1/'
粗略地说,这将使用 , 通过and保存.
的单个字符替换具有零个或多个 Q 到行尾的任何单个字符。它之所以有效,是因为它“贪婪”。\1
\(
\)
sed
推荐阅读
- javascript - ng-disable 在单选按钮 div 中不起作用
- ios - 无法在 iPad Air 上安装企业应用程序
- angular - 带有url参数的Angular2路由
- javascript - 在对象解构中使用冒号
- sql - 选择分页连接的行以达到不同相关行的可靠限制
- c - 如何告诉 Linux 进程将文件用作其整个堆?
- ios - 方法不会覆盖其超类中的任何方法:Swift/UITableViewController/MapKit
- php - 多表查询(获取注册详情)
- python - 为什么我的 python/pandas 代码没有正确过滤终止日期?
- javascript - div标签下的元素完全加载后如何隐藏加载器