Поиск строки и после получения результата вырезать это слово и сохранить результат в переменной

У меня есть имя файла abc.lst я ahve, который хранится в переменной, содержащей 3 строки слов среди них. Я хочу, чтобы grep второе слово, и в том, что я хочу вырезать слово из expdp в.dmp и сохранить его в переменной

пример:-

REFLIST_OP=/tmp/abc.lst
cat $REFLIST_OP
34 /data/abc/GOon/expdp_TEST_P119_*_18112017.dmp 12-JAN-18 04.27.00 AM

Желаемый результат: -

expdp_TEST_P119_*_18112017.dmp

Я попробовал под командой: -

FULL_DMP_NAME='cat $REFLIST_OP|grep /orabackup|awk '{print $2}'' echo $FULL_DMP_NAME /data/abc/GOon/expdp_TEST_P119_*_18112017.dmp
3 ответа

REFLIST_OP=/tmp/abc.lst
awk '{n=split($2,arr,/\//); print arr[n]}' "$REFLIST_OP"

Результаты теста:

$ REFLIST_OP=/tmp/abc.lst
$ cat "$REFLIST_OP"
34 /data/abc/GOon/expdp_TEST_P119_*_18112017.dmp 12-JAN-18 04.27.00 AM
$ awk '{n=split($2,arr,/\//); print arr[n]}' "$REFLIST_OP"
expdp_TEST_P119_*_18112017.dmp

Сохранение в переменной

myvar=$( awk '{n=split($2,arr,/\//); print arr[n]}' "$REFLIST_OP" )


Следующий awk может помочь вам на том же.

awk -F'/| ' '{print $6}' Input_file

ИЛИ

awk -F'/| ' '{print $6}' "$REFLIST_OP"

Объяснение: Просто создайте пространство и / как разделитель полей (в соответствии с вашим отображаемым вводом-входом), а затем напечатайте 6-е поле строки, которое требуется OP. Чтобы увидеть номер поля и значение поля, вы также можете использовать следующую команду:

awk -F'/| ' '{for(i=1;i<=NF;i++){print i,$i}}' "$REFLIST_OP"


Использование sed с одним из этих регулярных выражений

sed -e 's/.*\/\([^[:space:]]*\).*/\1/' abc.lst захватывать непространственные символы после /, печатая только захваченную часть.

sed -re 's|.*/([^[:space:]]*).*|\1|' abc.lst sed -re 's|.*/([^[:space:]]*).*|\1|' abc.lst То же, что и выше, но с использованием другого разделителя, что позволяет избежать /. -r чтобы использовать unescaped (

sed -e 's|.*/||' -e 's|[[:space:]].*||' abc.lst sed -e 's|.*/||' -e 's|[[:space:]].*||' abc.lst в два этапа, удалить до последнего /, удалить из пространства в конец. (Может быть, проще всего читать/понимать)

myvar=$(<abc.lst); myvar="${myvar##*/};" *};="" echo="" $myvar<="" code=""> <code>myvar=$(<abc.lst); myvar="${myvar##*/};" *};="" echo="" $myvar<="" code=""> Если вы хотите избежать внешней команды (<code>sed)

<code>

licensed under cc by-sa 3.0 with attribution.