`
txf2004
  • 浏览: 6872551 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《Shell脚本学习指南》第三章 查找与替换

 
阅读更多

3.1 查找文本


grep:使用POSIX定义的基本正则表达式(BRE)。
egrep:使用扩展正则表达式(ERE)。
fgrep:快速grep。使用优化的算法,匹配固定字符串而非正则表达式。

1992 POSIX标准将这三个改版整合成一个grep程序。

$ who | grep -F austen
使用-F选项查找固定字符串。事实上,只要匹配的模式里未含有正则表达式的meta字符,
则grep默认行为模式就等同于使用了-F。


3.2.6 在文本文件里进行替换

一般来说,执行文本替换的正确程序应该是sed - 流编辑器。
sed 's/:.*//' /etc/passwd | 删除第一个冒号之后的所有东西
sort -u 排序列表并删除重复部分

任何可显示的字符都能作为定界符。
sed 's;/home/tolstoy/;/home/lt/;'
sed 's/\\/\\/g'

用-e和-f选项,不用将多个sed通过管道串起来,就可以一次替换多个。
$ sed -e 's/foo/bar/g' -e 's/chicken/cow/g' file1.xml > file2.xml
$ cat fixup.sed
s/foo/bar/g
s/chicken/cow/g
...
$ sed -f fixup.sed file1.xml > file2.xml


3.2.8 sed的运作

命令行上的每个文件名会依次打开与读取。如果没有文件,则使用标准输入。
sed读取每个文件,一次读一行,将读取的行放到内存的一个区域(模式空间)。
所有编辑上的操作都会应用到模式空间的内容,当所有操作完成后,sed会将模式
空间的最后内容打印到标准输出,再回到开始处,读取另一个输入行。



3.3 字段处理

用空格(制表符)或特定的定界符(如冒号)。
#字符起始的行表示注释,软件必须可忽略这样的行才行。

以定界符分隔字段的最好例子就是/etc/passwd了:一行表示一个用户,每个字段以冒号隔开。
该文件含有7个字段:
tolstoy:x:2076:10:Leo Tolstoy:/home/tolstoy:/bin/bash
1.用户名称:2.加密后密码:3.用户ID:4.用户组ID:5.姓名:6.根目录:7.登录的Shell。


3.3.2 使用cut选定字段

$ cut -d : -f 1,5 /etc/passwd
root:root
...
tolstoy:Leo Tolstoy

$ cut -d : -f 6 /etc/passwd
/root
...
/home/tolstoy


3.3.3 使用join连接字段

以一个共同的键值(主字段)将多个文件结合在一起。

$ cat sales
#业务员 数据量
joe 100
jane 200
herman 150
chris 300

$ cat quotas
#业务员 配额
joe 50
jane 75
herman 80
chris 95

#! /bin/sh
# merge-sales.sh

# 删除注释并排序数据文件
sed '/^#/d' quotas | sort > quotas.sorted
sed '/^#/d' sales | sort > sales.sorted

# 以第一个键值作结合
join quotas.sorted sales.sorted

# 删除缓存文件
rm quotas.sorted sales.sorted


3.3.4 使用awk重新编排字段

awk程序基本架构:pattern { action }
pattern通常是由斜杠括起来的ERE,action通常是一个明了的print语句。
省略pattern则会对每一条输入记录执行action,省略action则等同于{ print }。

awk自动将各个记录分为字段,并将每条记录内字段数目存储到内建变量NF。
默认以空白分隔,还可以将FS变量设置为一个不同的值。$加数字表示字段值。

awk '{ print $1 }' 打印第1个字段
awk '{ print $2, $5 }' 打印第2与第5个字段
awk '{ print $1, $NF }' 打印第一个与最后一个字段
awk 'NF > 0 { print $0 }' 打印非空行
awk 'NF > 0' 同上

awk -F : '{ print $1, $5 }' /etc/passwd 设置字段分隔字符,-F选项自动设置FS变量。
root root
...
tolstoy Leo Tolstoy

记得在print的参数间用逗号隔开,否则awk将连接相邻的所有值。
awk -F: '{ print "User" $1 "is really" $5 }' /etc/passwd
Userrootis reallyroot
...
Usertolstoyis reallyLeo Tolstoy

分享到:
评论

相关推荐

    Shell脚本专家指南

    《Shell脚本专家指南》旨在为Linux、Unix以及OSx系统管理员提供短小精悍且功能强大的shell实现解决方案,教会读者如何使用现有调试器调试shell脚本。全书分为3个部分:脚本技术基础、系统交互和高级技术、有用的脚本...

    shell 编程指南pdf

    第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 ...

    LINUX与UNIX SHELL编程指南(很全)

    第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 ...

    Linux与unix shell编程指南

    第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 ...

    Linux与Unix Shell编程指南(PDF格式,共30章)

    第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 ...

    linux与unix shell编程指南

    第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 ...

    LINUX与UNIX SHELL编程指南 高清PDF

    第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 ...

    LINUX与UNIX SHELL编程指南

    第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 ...

    绝版经典《Linux与UNIX Shell编程指南》

    第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 ...

    LINUX 与 UNIX SHELL编程指南

    第三部分 登录环境 第 13 章 登录环境 125 13.1 /etc/profile 125 13.2 用户的$HOME.profile 128 13.3 stty 用法 129 13.4 创建.logout 文件 131 13.5 小结 131 第 14 章 环境和 shell 变量 132 14.1 什么是 ...

    linux与unix shell编程指南.rar

    第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 ...

    LINUX与UNIX+SHELL编程指南

    第3章 后台执行命令 22 3.1 cron和crontab 22 3.1.1 crontab的域 22 3.1.2 crontab条目举例 23 3.1.3 crontab命令选项 23 3.1.4 创建一个新的crontab文件 24 3.1.5 列出crontab文件 24 3.1.6 编辑crontab文件 24 ...

Global site tag (gtag.js) - Google Analytics