Existe algum script sed incorporado nas principais distribuições do Linux?

2

Quando eu estava estudando bash , achei muito útil ir estudar os scripts bash já presentes em uma instalação limpa do Linux— /etc/profile , por exemplo, e qualquer coisa em /etc/rc.d/init.d/ . Esses scripts são bastante avançados e, ao estudá-los, assegurei-me de que aprendi sobre muitos recursos obscuros não abordados na maioria dos bash tutoriais.

Eu estou estudando sed agora, e embora a lista de sed seja muito menor (então eu sei de fato que estudei todos os recursos), eu ainda acho que seria muito benéfico estudar através de alguns scripts sed que são realmente usados em produção , e não são apenas exemplos em tutoriais.

Para isso, eu gostaria muito de estudar os scripts sed que já estão presentes em uma distribuição Linux bem conhecida, como Ubuntu ou CentOS. O problema é que não tenho ideia de onde esses scripts possam estar. Eu já tentei file /bin/* | grep script | sed 's/:.*//' | xargs grep sed sem resultados. file /sbin/* | grep script | sed 's/:.*//' | xargs grep -c sed retorna alguns resultados, e eu estou procurando por eles, mas todos os que eu verifiquei até agora são apenas sed one-liners incorporados em bash ou sh scripts.

Onde posso encontrar alguns scripts sed reais em minha máquina Linux? Ou, na falta disso, há um bom lugar on-line para encontrar alguns scripts sed que são realmente usados na produção? (Ler através de sedtris não ajudará muito para os meus propósitos.)

    
por Wildcard 24.10.2015 / 05:49

3 respostas

3

Tente:

grep -w sed /etc/init.d/*
grep -w sed /etc/grub.d/*
grep -w sed /usr/bin/*

O primeiro produz 25 scripts e o segundo 47 no meu sistema (debian).

A opção -w restringe grep a procurar por sed como uma palavra inteira. Dessa forma, correspondências com palavras como used ou supposedly são evitadas.

    
por 24.10.2015 / 07:28
2

Em vez de procurar no sistema operacional, veja os scripts usados para criar os programas.

Qualquer script configure gerado pelo autoconf contém sed-scripts e ele próprio gera um script que contém um sed-script. Isso substitui os valores dos nomes nos arquivos de modelo, como Makefile.in , para produzir Makefile . Por exemplo (convenientemente encontrado com a pesquisa na web) esse pedaço de um arquivo config.status para distcc ilustra como sed é usado:

    while :; do
      case $as_dir in #(
      *\'*) as_qdir='$as_echo "$as_dir" | sed "s/'/'\\\\''/g"';; #'(
      *) as_qdir=$as_dir;;
      esac
      as_dirs="'$as_qdir' $as_dirs"
      as_dir='$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
     X"$as_dir" : 'X\(//\)[^/]' \| \
     X"$as_dir" : 'X\(//\)$' \| \
     X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
$as_echo X"$as_dir" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
        s///
        q
      }
      /^X\(\/\/\)[^/].*/{
        s///
        q
      }
      /^X\(\/\/\)$/{
        s///
        q
      }
      /^X\(\/\).*/{
        s///
        q
      }
      s/.*/./; q''
      test -d "$as_dir" && break
    done

Além do autoconf, o script é útil para outros aspectos da construção (e instalação) de programas. O script manlinks.sed nas ncurses é longo o suficiente para ser considerado como um programa. / p>

É claro que você pode usar grep para encontrar sed usado. No entanto, é comum usar um sufixo de arquivo ".sed" para scripts independentes. "locate .sed" encontra esses.

Em uma verificação rápida em minha máquina, há um script sed extremamente longo (mais de duas mil linhas, contando comentários):

#!/usr/5bin/sed -nf
#r
#r sokoban.sed - aurlio marinho jargas <[email protected]>
#r Changes by Gunnar Ritter, October 2002.
#r
#r Sccsid @(#)sokoban.sed       1.7 (gritter) 10/12/03
#r
#r motivated by reading the amazing Adventure (Colossal Cave) history
#r      <http://www.rickadams.org/adventure/a_history.html>
#r GPL levels took from Mike Sharpe's sokoban.vim <http://vim.sourceforge.net>
#r
#r IMPORTANT
#r this script has terminal control chars, so you must DOWNLOAD this
#r file. just copy/paste or printing it to a file (lynx) will NOT work.
#r
#r THE GAME
#r you know sokoban. everybody knows sokoban.

(Alguém fez uma versão colorida ).

Esse é um dos três scripts usados para testar sed nas "ferramentas de herança":

-rw-r--r--   1 tom           285 Oct  6 2002    makefile 
-rw-r--r--   1 tom          3664 Oct 11 2003    hanoi.sed
-rw-r--r--   1 tom          2338 Oct 11 2003    math.sed
-rw-r--r--   1 tom         42552 Oct 11 2003    sokoban.sed

Da mesma forma, o programa sed tem um exemplo interessante:

#!/bin/sed -nf
#  dc.sed - an arbitrary precision RPN calculator
#  Created by Greg Ubben <[email protected]> early 1995, late 1996
#
#  Dedicated to MAC's memory of the IBM 1620 ("CADET") computer.
#  @(#)GSU dc.sed 1.1 06-Mar-1999 [non-explanatory]
#
#  Examples:
#       sqrt(2) to 10 digits:   echo "10k 2vp" | dc.sed
#       20 factorial:           echo "[d1-d1<!*]s! 20l!xp" | dc.sed
#       sin(ln(7)):             echo "s(l(7))" | bc -c /usr/lib/lib.b | dc.sed
#       hex to base 60:         echo "60o16i 6B407.CAFE p" | dc.sed
#       tests most of dc.sed:   echo 16oAk2vp | dc.sed
#
#  To debug or analyze, give the dc Y command as input or add it to
#  embedded dc routines, or add the sed p command to the beginning of
#  the main loop or at various points in the low-level sed routines.
#  If you need to allow [|~] characters in the input, filter this
#  script through "tr '|~' ''" first (or use dc.pl).

Da mesma forma, há uma página com uma versão colorida de dc.sed

No entanto, os scripts autoconf e build são onde você pode encontrar uso produtivo de sed .

Leitura adicional:

por 17.07.2016 / 01:05
0

Eles não estão na sua máquina e não podem ser usados, mas você poderia fazer algo pior do que a pesquisa através deste site que você está usando, por exemplo pesquise por sed no corpo da resposta com pontuação de 5+ , como eles correspondem a problemas do mundo real respondidos.

    
por 24.10.2015 / 10:40