当我学习时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
中的单行代码。bash
sh
在哪里可以找到sed
Linux 机器上的一些实际脚本?或者如果做不到这一点,网上是否有一个好地方可以找到一些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.status
distcc 文件说明了如何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.sed
ncurses 中的脚本足够长,可以被视为一个程序。
你当然可以使用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,因为它们对应于已回答的现实世界问题。