Shell字符串处理使用正则表达式并基于分隔符提取单词

时间:2016-06-14 22:06:22

标签: regex string bash shell

我之前曾要求question使用正则表达式从最后一个冒号中获取字符串。虽然我不太清楚如何将它与程序的其余部分集成,但我已经收到了一些答案。我有一个命令行,它将以st:st:st:st1-st2-st3-st4-...stn的形式返回一个输出,我想删除st1,st2,st3 ... stn并将它们写在st1 \n "st2 \n...."stn \n这样的文本文件中。

我知道我可以使用while IFS:-来提取我想要的字符串,但是如何在最后一个冒号之前删除字符串?

1 个答案:

答案 0 :(得分:1)

  

如何摆脱最后一次冒号之前的字符串?

使用前缀删除:

$ str='st:st:st:st1-st2-st3-st4-...stn'
$ echo "${str##*:}"
st1-st2-st3-st4-...stn
删除了从开头开始并以${str##*:}结尾的最长匹配后,

$str返回字符串:

文档

来自man bash

  

$ {参数#word}
$ {参数## word}
     删除匹配的前缀模式。扩展单词以生成模式,就像在路径名扩展中一样。如果模式   火柴             参数值的开头,则扩展的结果是参数的扩展值最短             匹配模式('#''案例)或最长匹配模式('' ##''案例)删除。如果参数是@或*,则   图案             依次将删除操作应用于每个位置参数,并且扩展是结果列表。如果参数是             使用@或*下标的数组变量,模式删除操作依次应用于数组的每个成员,和   该    扩展是最终的清单。