LINUX.ORG.RU

Как отгрепать слова, не начинающиеся с -

 ,


0

2

Скрипт принимает аргументы вида -d -r abc-123 zxy-345.
Нужно получить слова, не начинающиеся с -, то-есть abc-123 zxy-345.

Казалось бы простая задача, но не могу понять как сделать. grep -Po '(?<!-)\S+' почему-то не работает.

★★★★★
Ответ на: комментарий от anonymous

А неначинающиеся

line="-d -r abc-123 zxy-345"; for i in $line ; do echo $i | grep "^[^-]"; done;
anonymous
()

Типичный случай, когда для решения проблемы выбрал регулярки и теперь у тебя две проблемы :)

echo '-d -r abc-123 zxy-345' | tr ' ' '\n' | grep -v '^-'

KennyMinigun ★★★★★
()
Ответ на: комментарий от beastie

Может лучше не маяться дурью, а использовать getopt?

я его и использую. точнее getopts. но нужно же отделить ключи от аргументов. аргументов может быть больше одного, а ключей может вообще не быть

teod0r ★★★★★
() автор топика
Ответ на: комментарий от Radjah

Вот как-то так попробуй.

там по-моему что-то другое, что-то не связанное с моим вопросом. или я что-то не понял?

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

Не нужно, читай про optind и optarg.

TL;DR: после того как getopts отработал и понаходил все свои ключи он оставляет остаток для дальнейшего разбора тебе.

beastie ★★★★★
()
Ответ на: комментарий от beastie

читай про optind и optarg.

почитал. нихера не понял ни про тот ни про другой.
можешь дать пример для моего случая или ссылку, где объясняется?

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

Ну вот тебе пример, буквально из мана:

#!/bin/sh

args=`getopt abo: $*`
set -- $args
for i; do
        case "$i" in
                -a|-b)
                        echo flag $i set
                        shift
                        ;;
                -o)
                        echo oarg is $2
                        shift
                        shift
                        ;;
                --)
                        shift
                        break
                        ;;
        esac
done
echo rest is $1

./opt.sh -a -o file otherfile
flag -a set
oarg is file
rest is otherfile
beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.