我之前曾要求question使用正则表达式从最后一个冒号中获取字符串。虽然我不太清楚如何将它与程序的其余部分集成,但我已经收到了一些答案。我有一个命令行,它将以st:st:st:st1-st2-st3-st4-...stn
的形式返回一个输出,我想删除st1,st2,st3 ... stn并将它们写在st1 \n "st2 \n...."stn \n
这样的文本文件中。
我知道我可以使用while IFS:-
来提取我想要的字符串,但是如何在最后一个冒号之前删除字符串?
答案 0 :(得分:1)
如何摆脱最后一次冒号之前的字符串?
使用前缀删除:
$ str='st:st:st:st1-st2-st3-st4-...stn'
$ echo "${str##*:}"
st1-st2-st3-st4-...stn
删除了从开头开始并以${str##*:}
结尾的最长匹配后, $str
返回字符串:
。
来自man bash
:
$ {参数#word}
$ {参数## word}
删除匹配的前缀模式。扩展单词以生成模式,就像在路径名扩展中一样。如果模式 火柴 参数值的开头,则扩展的结果是参数的扩展值最短 匹配模式('#''案例)或最长匹配模式('' ##''案例)删除。如果参数是@或*,则 图案 依次将删除操作应用于每个位置参数,并且扩展是结果列表。如果参数是 使用@或*下标的数组变量,模式删除操作依次应用于数组的每个成员,和 该 扩展是最终的清单。