从Unix中的给定String中提取Middle Substring

时间:2015-09-15 12:53:50

标签: unix substring

我有一个不同范围的字符串:

WATSON_AJAY_AB04_DOTHING.data
WATSON_NAVNEET_CK4_DOTHING.data
WATSON_PRASHANTH_KJ56_DOTHING.data
WATSON_ABHINAV_KD323_DOTHING.data

在上面这些字符串中我怎样才能提取

AB04,CK4,KJ56,KD323 
在Unix中

2 个答案:

答案 0 :(得分:2)

echo "$string" | cut -d'_' -f3

您可以使用sed或grep执行此任务。但由于字符串很简单,我认为你不需要。

答案 1 :(得分:0)

一种方法是使用bash'cut'命令。以下是直接在BASH shell /命令行上的示例:

jimm@pi$ string='WATSON_AJAY_AB04_DOTHING.data'
jimm@pi$ cut -d '_' -f 3 <<< "$string"
AB04   <-- outputs the result directly

(编辑:当然卢卡斯上面的答案也是一个快速的'单行',与上面做同样的事情 - 他打败了我):)

剪切将使用_字符作为分隔符(-d '_'部分),然后显示字符串的第3个切片(-f 3部分)。

或者,如果您想从内容列表中输出第3个切片(使用上面的列表),您可以编写一个简单的BASH脚本。

首先,将上面的行('WATSON ... etc')保存为text.txt之类的内容。然后打开您喜欢的文本编辑器并输入:

#!/bin/sh
cut -d '_' -f 3 < $1

将该脚本保存为某些有用的名称,例如slice.sh,并确保其可执行chmod 775 slice.sh之类的内容。

然后在命令行中,您可以对文本文件执行脚本,并立即获得所需文件的那些部分的输出(在这种情况下是第三组文本,由_字符分隔):

$ ./slice.sh text.txt
AB04
CK4
KJ56
KD323

希望有所帮助!请记住,上面的命令可能会有所不同,具体取决于您使用的* nix的风格,但它至少应该指向正确的方向。