我有一个不同范围的字符串:
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中?
答案 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的风格,但它至少应该指向正确的方向。