2016-04-22 2 views
2

Вот мой Bash код:Как я могу захватить часть этой строки после `/`?

echo "Some string/Another string" | grep -o "\/.*" 

Это возвращает /Another string.

Но я не хочу, чтобы / был включен в стоимость, возвращаемую echo.

Как изменить регулярное выражение сделать это?

EDIT: Я хочу соответствовать всем после /, независимо от того, что после него. "Another string" не всегда после /.

ответ

2

Если у вас есть GNU Grep, который поддерживает PCRE, то вы можете использовать \K забыть матч.

$ echo "Some string/Another string" | grep -oP "\/\K.*" 
Another string 
+1

Чтобы разработать '\ K', это просто способ сделать левую сторону lookbehind:' (? <\ /). * ' – andlrc

2

С СЭД:

$ sed 's/.*\/\(.*\)/\1/' <<< "Some string/Another string" 
Another string 

Это поиск любого characther до следующего /, а затем захватить и печать следующих символов.

Это может быть более удобным для чтения в режиме ERE (-r вариант с GNU SED) и с другим разделителем:

sed -r 's|.*/(.*)|\1|' 
+0

Извините, я должен был быть более конкретным. Я хочу совместить все после '/', независимо от того, что после него. '" Другая строка "' не всегда после '/' – Username

+0

Обновлен мой ответ. – SLePort

2

С расширением параметра:

$ string='Some string/Another string' 
$ echo "${string#*/}" 
Another string 

Расширение с # снимает то, что приходит после него с самого начала расширенного параметра.

С AWK:

$ awk -F/ '{print $2}' <<< "$string" 
Another string 

Это устанавливает разделитель полей в / и печатает второе поле.

2

Вы можете сделать это с сократить команды:

Если вы хотите строки между первым и вторым возникновением /

cut -d '/' -f 2 <<< "Some string/Another string/abc" 
output: Another string 

Если вы хотите всю строку после первого появления /

cut -d '/' -f 2- <<< "Some string/Another string/abc" 
output: Another string/abc 
Смежные вопросы