给出abc-def-ghi-jkl
之类的字符串
sed
命令是否可以提取第n个分隔符左侧的子字符串,例如abc
为1,abd-def
为2等?
我需要它来根据计算机主机名的子集创建文件,通常是abc-def-xyz.domain.com
。
环顾四周后,awk
,cut
和sed
似乎在这种提取中合并,但我更喜欢可以用作命令行一部分的内容。
答案 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