在 Unix 中从给定的字符串中提取中间子串

Extract Middle Substring from a given String in Unix

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

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 中?

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

您可以使用 sed 或 grep 来完成这项任务。但是由于字符串是如此简单,我认为您不需要。

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

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

(编辑:当然,Lucas 上面的回答也是一个快速的 'one-liner',它做的事情与上面相同 - 他先于我):)

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

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

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

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

将该脚本保存为一些有用的名称,如 slice.sh,并确保它可执行 chmod 775 slice.sh

然后在命令行中,您可以针对您的文本文件执行脚本,并立即获得您想要的文件部分的输出(在本例中为第三组文本,以 _ 字符分隔):

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

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