正文
测试常用linux命令之sed篇
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
一、sed命令
可以放在单独的脚本文件中执行:sed -f script1 data1
多条命令也可以用{}括起来
sed可以进行文本的替换,删除,行添加,打印等。采用
sed [address]{command1
command2} 文件名的形式
其中adress可以有两种形式:1)行的数字范围。2)用文本模式来过滤出某行。
文本替换:sed '2,$s/dog/cat/g' a.txt 通过模式查找: sed '/hello/s/dog/cat'
行删除: sed '3d' a.txt sed '/number/d' a.txt
插入和附件文本:sed '5i\new line' a.txt sed '3o\new line' a.txt
注意这些修改都是基于流的,如果想要在源文件上修改,需要加上-i选项。
打印: sed -n '3,5p' 基于文本匹配的 sed -n '/pattern/p'
sed的一些高级知识
n;提取文本的下一行,代表从文件流的下一个文本行进行处理
N;代表将下一行加到已经在模式空间的文本上
自己使用的一直是sed命令的模式空间,其实它还有一个保持空间
h:将模式空间复制到保持空间
H:将模式空间附加到保持空间
g:将保持空间复制到模式空间
G:将保持空间附件到模式空间
x:交换模式空间和保持空间的内容
相当于将一部分后面需要的内容先保存,最后再用g,G命令将数据从保持空间复原到模式空间。
其他:!代表符合特定模式的不怎么怎么着。。。
三、具体案例
#!/bin/sh
#该脚本用来实现统计一个目录下所有的文件个数 all_count=
for filePath in `echo $PATH | sed 's/:/ /g'`
do
count=`ls $filePath | wc -l`
echo "$filePath":"$count"
all_count=$[$all_count+$count]
done
echo "all_count:"$all_count
统计路径下的文件个数
sed -i '/^$/d' a.txt
利用sed去除空行
cat a.txt | sed 'N;s/\n/ /g'
利用sed实现多行合并
cat a.txt | sed '/line2/{N;s/\n/ /g}'
利用sed实现特定行的合并
之前自己一直采用的cat -n的方式,这种方法自然可以,只不过行号的格式往往不是想要的
sed '=' a.txt | sed 'N;s/\n/\t/g'
利用sed为行添加行号
sed -i 's/^ //g' a.txt
利用sed去除段前的空格
cat a.txt | sed '/./,/^$/!d'
利用sed将多个空白行合并为一个
cat a.txt | sed '/./,/$/!d'
(从有文字的行到最后一行,都不删除)
利用sed删除开头的空白行
cat a.txt | sed 's/<[^>]*>//g'
需要忽略任何嵌入原始标签的大于号
利用sed去除html标签