Sed命令提取字符串中字符分隔单词的子字符串

时间:2012-02-07 12:53:31

标签: sed substring separator

给出abc-def-ghi-jkl之类的字符串 sed命令是否可以提取第n个分隔符左侧的子字符串,例如abc为1,abd-def为2等?

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

环顾四周后,awkcutsed似乎在这种提取中合并,但我更喜欢可以用作命令行一部分的内容。

3 个答案:

答案 0 :(得分: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 :(得分: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; }}"

答案 2 :(得分: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