sed命令提取字符串中字符分隔字词的子串
问题描述:
给定一个字符串,如abc-def-ghi-jkl
。
可以使用sed
命令将子字符串提取到第n个分隔符字符的左侧,如abc
,1,abd-def
2等?sed命令提取字符串中字符分隔字词的子串
我需要它根据计算机主机名的子集创建文件,通常是abc-def-xyz.domain.com
。
环顾四周,看起来awk
,cut
和sed
被合并在这种提取中,但我更喜欢可以用作命令行一部分的东西。
答
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
答
如何
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; }}"
答
这可能会为你工作:
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
它需要*是'sed'吗?你有没有考虑过使用'cut'? – 2012-02-07 12:56:18
@MarkByers我已编辑允许更多选项,在shell命令中的可用性是主要要求 – vfclists 2012-02-07 12:59:30