Como cortar todas as linhas de uma string específica?

0

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

Saída desejada:

Apple01_xyz_1
Apple01_abc_c1
Apple21_trs_1
Apple21_efg_1
Apple21_tefg_1

Como usar nawk ou sed para cortar a parte da frente sempre que a Apple for encontrada na linha?

Estou usando o KSH no Solaris 10.

    
por ayrton_senna 29.01.2016 / 19:16

2 respostas

3

comentário @ cuonglm ilustra como você pode fazer isso com sed :

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

Você também pode considerar usar o bom e velho grep :

grep -o 'Apple.*' input.txt

Ressalva 1 - Eu não tenho nenhum solaris à mão, então pode ser que o solaris grep não tenha a opção -o . YMMV.

Advertência 2 - Se o seu arquivo de entrada tiver linhas que não contenham Apple s, elas não aparecerão na saída. Não tenho certeza se esse é o comportamento que você deseja. Caso contrário, a resposta sed será suficiente.

    
por 29.01.2016 / 20:02
1

Você solicitou nawk ou sed . Como você mencionou ksh , por que não fazer uma versão de shell puro?

O seguinte é executado em qualquer shell compatível com 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
!

Isso resulta em:

Apple01_xyz_1
Apple01_abc_c1
Apple21_trs_1
Apple21_efg_1
Apple21_tefg_1

shell puro

    
por 30.01.2016 / 21:07