2012-02-07 134 views
0

给定一个字符串,如abc-def-ghi-jkl
可以使用sed命令将子字符串提取到第n个分隔符字符的左侧,如abc,1,abd-def 2等?sed命令提取字符串中字符分隔字词的子串

我需要它根据计算机主机名的子集创建文件,通常是abc-def-xyz.domain.com

环顾四周,看起来awk,cutsed被合并在这种提取中,但我更喜欢可以用作命令行一部分的东西。

+2

它需要*是'sed'吗?你有没有考虑过使用'cut'? – 2012-02-07 12:56:18

+0

@MarkByers我已编辑允许更多选项,在shell命令中的可用性是主要要求 – vfclists 2012-02-07 12:59:30

回答

4

cut是你的朋友:其他

$ echo "abc-def-ghi-jkl" | cut -d- -f1 
abc 
$ echo "abc-def-ghi-jkl" | cut -d- -f-2 
abc-def 
$ echo "abc-def-ghi-jkl" | cut -d- -f-3 
abc-def-ghi 
$ echo "abc-def-ghi-jkl" | cut -d- -f-4 
abc-def-ghi-jkl 

可能性:

$ echo "abc-def-ghi-jkl" | cut -d- -f2 
def 
$ echo "abc-def-ghi-jkl" | cut -d- -f3 
ghi 
$ echo "abc-def-ghi-jkl" | cut -d- -f4 
jkl 
1

如何

LEVELS=3; 
echo "abc-def-ghi-jkl" | awk -F '-' "{x=$LEVELS; n=1; ORS=\"\"; while (n<=x) {print \$n; if (n<x) print \"-\"; n=n+1; }}" 
1

这可能会为你工作:

a=1;b=2;c=3;d=4 
echo "abc-def-ghi-jkl" | sed 's/-/\n/'"$a"';s/\n.*//'   
abc 
echo "abc-def-ghi-jkl" | sed 's/-/\n/'"$b"';s/\n.*//' 
abc-def 
echo "abc-def-ghi-jkl" | sed 's/-/\n/'"$c"';s/\n.*//' 
abc-def-ghi 
echo "abc-def-ghi-jkl" | sed 's/-/\n/'"$d"';s/\n.*//' 
abc-def-ghi-jkl