我正在处理来自商业供应商的文件,该文件在每行末尾使用字母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
答案 0 :(得分:2)
使用sed
:
sed 's/\(.\)Q*$/\1/'
粗略地讲,这会使用.
并通过\1
和{{1}保存,将带有零个或多个Q的任何单个字符\(
替换为该字符的行尾。 }。之所以有效,是因为\)
是“贪婪的”。
答案 1 :(得分:1)
使用awk
,您可以尝试:
awk '/^Q+$/{print "Q"; next} {gsub(/Q+$/,"")} 1' prueba.txt
如果不是这种情况,请告知我。