Intereting Posts
Не удалось запустить Sugar на Arch Linux из-за PyGIWarning Влияние статической и динамической привязки на начальный адрес Как найти, какие машины простаивают в кластере из множества узлов Как вернуться из корневого входа в систему для входа пользователя в систему? bash: test, если $ WORD находится в наборе Различное значение хэша большого файла rsynced на centos и ubuntu? Пакетное переименование папок с помощью одной команды bash Почему регулярное выражение с \\ $ \ {работает с egrep, но не с sed? Почему «меньше» не выделяется жирным шрифтом? Настройка USB-микрофона под Linux Как перенаправить dd на pv? Маршруты, добавленные через NetworkManager, являются неверными vs ip route. Как заставить NetworkManager создавать правильные маршруты? Ошибка Ant после установки NetBeans 7.3 в Lubuntu ext4 переопределяет мой параметр commit = 100 mount с фиксацией = 0 Системы Debian, похоже, распознают динамики, но не наушники для ноутбуков Lenovo

Как вырезать каждую строку из определенной строки?

input.txt:

john_Apple01_xyz_1 john_Fruit_Apple01_abc_c1 john_Apple21_trs_1 john_Fruit_Apple21_efg_1 john_Fruit_Apple21_tefg_1 

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

 Apple01_xyz_1 Apple01_abc_c1 Apple21_trs_1 Apple21_efg_1 Apple21_tefg_1 

Как использовать nawk или sed, чтобы вырезать ведущую часть каждый раз, когда Apple находится в строке?

Я использую KSH в Solaris 10.

Комментарий @ cuonglm показывает, как вы можете сделать это с помощью sed :

 sed -e 's/.*\(Apple\)/\1/' input.txt 

Вы также можете использовать старый добрый grep :

 grep -o 'Apple.*' input.txt 

Caveat 1 – У меня нет солярис, поэтому может быть, что greys Solaris не имеет опции -o . YMMV.

Caveat 2 – Если у вашего входного файла есть строки, которые вообще не содержат никаких Apple , то они вообще не будут отображаться на выходе. Не уверен, что это то поведение, которое вы хотите. Если нет, то ответа sed будет достаточно.

Вы попросили nawk или sed . Как вы упоминаете ksh , почему бы не сделать чистую версию оболочки?

Следующие действия выполняются в любой совместимой с POSIX оболочке:

 p="Apple" while read line ; do case $line in (*$p*) echo $p${line#*$p};; esac done <<! john_Apple01_xyz_1 john_Fruit_Apple01_abc_c1 john_Apple21_trs_1 john_Fruit_Apple21_efg_1 john_Fruit_Apple21_tefg_1 ! 

Это приводит к:

 Apple01_xyz_1 Apple01_abc_c1 Apple21_trs_1 Apple21_efg_1 Apple21_tefg_1 

чистая оболочка