当前位置:  操作系统/服务器>linux

Shell脚本学习指南之查找与替换介绍

    来源: 互联网  发布时间:2014-10-13

    本文导语:  3.1 查找文本grep:使用POSIX定义的基本正则表达式(BRE)。egrep:使用扩展正则表达式(ERE)。fgrep:快速grep。使用优化的算法,匹配固定字符串而非正则表达式。 1992 POSIX标准将这三个改版整合成一个grep程序。 $ who | grep -F auste...

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


    
 
 

您可能感兴趣的文章:

  • Linux C编程一站式学习,高级shell Bash脚本编程指南,
  • Shell脚本学习指南之文本处理工具
  • shell脚本学习指南[一](Arnold Robbins & Nelson H.F. Beebe著)
  • shell脚本学习指南[六](Arnold Robbins & Nelson H.F. Beebe著)
  • shell脚本学习指南[二](Arnold Robbins & Nelson H.F. Beebe著)
  • shell脚本学习指南[五](Arnold Robbins & Nelson H.F. Beebe著)
  • shell脚本学习指南[三](Arnold Robbins & Nelson H.F. Beebe著)
  • shell脚本学习指南[四](Arnold Robbins & Nelson H.F. Beebe著)
  • 如何用shell做字符串的替换
  • [shell问题]用16进制 替换 普通字符串 awk 用法
  • (shell编程)替换问题
  • shell编程中转义字符替换问题,求高手解答
  • 求一段查询并替换文本字符的shell脚本
  • shell脚本 替换功能的问题,请帮忙
  • shell中字符串的替换操作
  • shell字符串替换,达人进
  • Shell 命令替换的两种方式
  • shell如何只替换字符串的第一个字符?
  • 急,Shell中Sed替换的问题
  • 如何用shell实现将指定文件中的指定的字符串替换为我指定的另外的字符串
  • 如何用SHELL命令将字符串“/dev/ttyp12" 替换成"p12"
  • 如何用shell替换文本中指定的字符串,在线等,急,请各位大侠帮忙!
  • 这个shell应该怎么写?其中要用到sed替换和随机数
  • 在shell脚本中如何把一个文件中的双引号替换成单引号????
  • 一个shell 字符替换 的小问题
  • 跪求:shell如何替换文本中匹配的一行
  • SHELL行处理:替换行中某域
  • 如何使用shell脚本替换不确定文本信息?实例!
  •  
    本站(WWW.169IT.COM)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.169IT.COM)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • shell脚本如何调用另外一个shell脚本的函数?
  • 急救!关于Shell脚本删除过期文件的问题,Shell脚本达人乱入
  • shell 脚本中命令别名在脚本外无法使用
  • 傻瓜问题,请问shell编程和shell脚本编程的关系
  • C语言调用shell脚本后,通过何种方法能获取脚本中变量的值
  • 想用shell脚本定时执行另一个脚本
  • 一个shell执行另一个带参数shell脚本????????????
  • 如何给shell脚本加密,脚本中有密码。最好是比较直接的,不要说让用 shc
  • Shell脚本调用Sql脚本并向其中传递变量
  • 请问,Shell中如何执行另外一个Shell脚本?
  • 如何传递参数给linux shell 脚本(当脚本从标准输入而不是从文件获取时)
  • nohup执行的shell脚本,全局变量不能传递到脚本中使用吗?
  • cd、zip等命令在shell提示符下能执行,在shell脚本中为什么不能执行呢?
  • shell脚本问题 关于父脚本和子脚本的问题
  • shell脚本错误输出
  • 请教shell脚本启动程序
  • 关于shell脚本的。
  • 关于arm linux下的别名配置脚本如何在进入用户时让shell执行的问题,如bashrc,profile,.bash_profile等脚本,寻求高手解答
  • 高分请教关于Shell脚本执行中断问题?
  • linux shell脚本
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 不同类型的shell*(K SHELL , C SHELL) 用命令怎么切换?
  • linux bash shell命令:grep文本搜索工具简介
  • 我在执行shell时,想在shell里直接向mysql数据库插入数据,我该如何写shell。
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 菜鸟问问题:shell是什么呢?普通的ls、cp、pwd这些命令算不算shell呢?如何把自己写的文件变成shell呢?
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • shell变量和子shell的问题请教
  • linux bash shell命令:文本搜索工具Grep命令选项及实例
  • 请问“当前shell”和“子shell”的区别?
  • linux bash shell命令:文本搜索工具grep正则表达式元字符集(基本集)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2019,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

    浙ICP备11055608号-3