給定一個字符串,如abc-def-ghi-jkl
。
可以使用sed
命令將子字符串提取到第n個分隔符字符的左側,如abc
,1,abd-def
2等?sed命令提取字符串中字符分隔字詞的子串
我需要它根據計算機主機名的子集創建文件,通常是abc-def-xyz.domain.com
。
環顧四周,看起來awk
,cut
和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