Linux命令行与shell脚本(15)--sed使用

sed

  • sed可以基于输入到命令行的或是存储在命令文本文件中的命令来处理数据流中的数据。
  • s命令会用斜线间指定的第二个文本字符串来替换第一个文本字符串。
echo "This is a test" | sed 's/test/big test/'  #This is a big test
  • sed编辑器自身不会修改文本文件的数据,它只会将修改后的数据发送到STOUT
  • 在sed命令上执行多个命令时,只要用-e就可以了
sed -e 's/brown/green/; s/dog/cat/' date1  #将date1中brown替换成green,dog换成cat输出到STOUT

-如果有大量要处理的sed命令,将它们放进一个文件中通常会方便一些

$ cat script1
s/brown/green/
s/dog/cat/
$
$ sed -f script1 data1
  • p标记
sed -n 's/test/trial/p' data  # -n选项禁止sed输出, p替换标记会输出修改过的行
  • w标记,将输出保存的文件中
$ sed -n 's/test/trial/w test' data 
$ cat test
This is a trial line
  • sed可以指定作用的行
sed '2s/dog/cat' data  #作用到第2行
sed '2,3s/dog/cat' data #作用到第2,3行
sed '2,$s/dog/cat' data #作用到第2行到结尾行
sed '/Samantha/s/bash/csh' data #作用到匹配Samantha的行上
sed '/rich/s/bash/csh' /etc/passwd #找到含有rich的行,然后用csh替换文本bash
  • d命令可用于删除行(sed命令不会修改原始文件)
sed 'd' data #删除data中所有行
sed '3d' data  #删除第3行
sed '3,$d' data #删除第3行到最后一行
sed '/number 1/d' #删除匹配number 1的行
  • i命令会在指定行前增加一个新行
  • a命令会在指定的行后增加一个新行
  • c命令会修改指定的行
  • y命令用于当个字符的替换 sed `y/123/789/` data #data中的1替换成7,2替换成8,3替换成9
  • r命令允许将一个独立文件中的数据插入到数据流中
$ cat data
This is an added line.
This is the second added line
$ sed '3r data' test
This is line number 1
This is line number 2
This is line number 3
This is an added line.
This is the second added line
This is line number 4
This is line number 5
This is line number 6
This is line number 7

多行命令

  • 如果你正在数据中查找短语Linux System Administrators Group,很有可能短语在其中任意两个词之间被分成两行。如果你用普通的sed编辑器命令来处理文本,几乎不可能发现短语是怎么被分开的

  • &符号用来代表替换命令的匹配模式

$ echo "The cat sleeps in his hat. " | sed 's/.at/"&"/g'
The "cat" sleeps in his "hat". 
  • 用圆括号来定义替换模式的子字符串,给第一个模块分配字符\1,第二个模块分配字符\2
$ echo "That furry cat is pretty" | sed 's/furry \(.at\)/\1/'
That cat is pretty
$ echo "That furry hat is pretty" | sed 's/furry \(.at\)/\1/'
That hat is pretty
  • 使用包装脚本使用sed, 1!G表示将保持空间附加到模式空间,不附加到第一行文本后面,$p表示数据流到达最后一行时,打印
$ cat reverse.sh 
#!/bin/bash

sed -n '{
1!G          
h
$p
}' $1


$ cat data
This is the header line. Linux 
System This is a data line.Linux 
System This is the last line.

$ ./reverse.sh data
System This is the last line.
System This is a data line.Linux 
This is the header line. Linux 
  • 格式化数据
 cat format_number.sh 
#!/bin/bash

result=`echo $1 | sed '{
:start
s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/
t start
}'`
echo $result
$ ./format_number.sh 12345456
12,345,456
  • 每两行之间添加一个空行 , /^$/d删除空白行 $!G 任意行下添加空白行,除了最后一行
cat data
This is one 
This is two


This is three

This is four
$ sed '/^$/d;$!G' data
This is one 

This is two

This is three

This is four

  • 给文件中的行编号 =会输出行号
$ cat data1
This is one 

This is two

This is three

This is four
$ sed '=' data1 | sed 'N;s/\n/ /' 
1 This is one 
2 
3 This is two
4 
5 This is three
6 
7 This is four
Linux命令行Shell脚本编程大全》第4版是一本系统介绍Linux命令行Shell脚本编程的权威性书籍,该书从入门到进阶详细介绍了Linux命令行使用方法以及Shell脚本的编写技巧。 书中首先介绍了Linux命令行的基础知识,包括文件系统操作、文件和目录管理、进程控制等内容。通过学习这些基础知识,读者可以熟悉常用的Linux命令,并能够自如地在命令行下完成各种操作。 接下来,书中详细介绍了Shell脚本的编写方法和技巧。Shell脚本是一种批处理语言,可以用于编写自动化脚本,简化重复的任务。书中介绍了Shell脚本的语法结构、变量和数组的使用、流程控制语句、函数、正则表达式等知识,并通过实例演示了各种实用的Shell脚本编程技巧。 此外,该书还介绍了一些常用的Shell工具和Shell脚本编程的高级技巧。例如,sed和awk是两个强大的文本处理工具,通过学习它们的使用方法,读者可以更高效地处理文本数据。此外,书中还介绍了如何编写可重用的Shell脚本、如何进行脚本调试和测试等内容,帮助读者提高Shell脚本编程的技能。 总的来说,《Linux命令行Shell脚本编程大全》第4版是一本很全面、实用的Linux命令行Shell脚本编程指南。无论是初学者还是有一定经验的读者,都可以通过阅读本书系统地学习Linux命令行Shell脚本编程,提高自己在Linux环境下的技术水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值