Команда Sed для извлечения подстроки разделенных символами слов в строке - PullRequest
0 голосов
/ 07 февраля 2012

Имеется строка типа abc-def-ghi-jkl.
. Может ли команда sed извлечь подстроку слева от n-го символа-разделителя, например abc для 1, abd-def для 2 и т. Д.?

Мне это нужно для создания файлов на основе подмножества имени компьютера, обычно abc-def-xyz.domain.com.

Посмотрев вокруг, выясняется, что awk, cut и sed объединены в такого рода извлечениях, но я предпочитаю что-то, что можно использовать как часть командной строки.

Ответы [ 3 ]

4 голосов
/ 07 февраля 2012

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 голос
/ 07 февраля 2012

Это может работать для вас:

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
1 голос
/ 07 февраля 2012

Как насчет

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; }}"
...