主流 Linux 发行版是否内置了 sed 脚本?

主流 Linux 发行版是否内置了 sed 脚本?

当我学习时bash,我发现去研究 Linux 的全新安装中已经存在的 bash 脚本非常有帮助——/etc/profile例如,以及/etc/rc.d/init.d/.这些通常是相当高级的脚本,通过研究它们,我确保了解了大多数bash教程中未涵盖的许多晦涩功能。

我现在正在学习sed,虽然功能列表要短得多(所以我知道我已经研究了所有功能),但我仍然觉得通过一些实际上是的脚本sed来学习是非常有益的sed用过的生产,并且不仅仅是教程中的示例。

为此,我真的很想研究sed知名 Linux 发行版(例如 Ubuntu 或 CentOS)上已经存在的任何脚本。问题是,我不知道这样的脚本可能在哪里。我已经尝试过file /bin/* | grep script | sed 's/:.*//' | xargs grep sed但没有结果。 file /sbin/* | grep script | sed 's/:.*//' | xargs grep -c sed返回一些结果,我正在查看这些结果,但到目前为止我检查过的所有结果都只是嵌入或脚本sed中的单行代码。bashsh

在哪里可以找到sedLinux 机器上的一些实际脚本?或者如果做不到这一点,网上是否有一个好地方可以找到一些sed实际在生产中使用的脚本? (通读sedtris对我的目的没有多大帮助。;)

答案1

尝试:

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

第一个在我的系统 (debian) 上生成 25 个脚本,第二个生成 47 个脚本。

-w选项仅限grep于查找sed整个单词。这样,就可以避免与“used或”等单词的匹配。supposedly

答案2

与其查看操作系统,不如查看用于构建程序的脚本。

任何 autoconf 生成的configure脚本都包含 sed 脚本及其本身产生包含 sed 脚本的脚本。这会用值替换模板文件中的名称,例如Makefile.in生成Makefile.例如(通过网络搜索很容易找到)这块config.statusdistcc 文件说明了如何sed使用:

    尽管 :;做
      #( 中的 $as_dir 情况
      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
      *) as_qdir=$as_dir;;
      埃萨克
      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" | $as_echo X"$as_dir"|
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
        s//\1/
        q
      }
      /^X\(\/\/\)[^/].*/{
        s//\1/
        q
      }
      /^X\(\/\/\)$/{
        s//\1/
        q
      }
      /^X\(\/\).*/{
        s//\1/
        q
      }
      s/.*/./;问'`
      测试-d“$as_dir”&& 中断
    完毕

除了 autoconf 之外,脚本对于构建(和安装)程序的其他方面也很有用。这manlinks.sedncurses 中的脚本足够长,可以被视为一个程序。

你当然可以使用grep来查找sed使用过的。但是,独立脚本通常使用“.sed”文件后缀。 "locate .sed"找到那些。

快速检查我的机器,有一个非常长的 sed 脚本(超过两千行,算上注释):

#!/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.

(有人做了一个彩色版的)。

sed这是“传家宝工具”中用于测试的三个脚本之一:

-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

同样,sed 程序有一个有趣的例子:

#!/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 '|~' '\36\37'" first (or use dc.pl).

同样,有一个页面带有dc.sed 的彩色版本

然而,autoconf 和构建脚本是您可能会发现sed.

进一步阅读:

答案3

它们不在您的计算机上,并且可能不会被使用,但您可能会做比搜索您正在使用的这个网站更糟糕的事情,例如在得分为 5+ 的答案正文中搜索 sed,因为它们对应于已回答的现实世界问题。

相关内容