Linux 基本命令之sed 的用法:替换、删除、插入、修改、转换、打印
sed命令的基本语法及用法。
·
##### sed
cat filename.txt //先查看文件内容
sed -n '/header/!p' filenamme.txt //p:只打印文件中包含单词header的那行;
!:除了包含header那行,其它的都别打印出来。
sed 's/test/trial/' filename.txt //s:替换命令,默认替换每行出现的第一处
# s/oldstring/newstring/2 //只替换每行第2处的内容
# s/oldstring/newstring/g //替换文本中所有匹配的内容
# s/oldstring/newstring/p //打印匹配的内容
# 's/oldstring/newstring/w newfile.txt’ filename.txt //w:将替换内容输出保存
到指定文件
sed -n 's/test/trial/p' filename.txt //p和n配合使用:只输出被替换命令修改过的行
sed -n '2,3p' filename.txt //快速打印第2,3行数据
sed -n '/number 3/p' filename.txt //只打印包含number 3的行
sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd //替换/etc/passwd文件中的bash shell
sed 's!/bin/bash!/bin/csh!' /etc/passwd //!可以代替/作字符串分隔符
sed '2s/oldstring/newstring/' filename.txt //只修改文件中第二行
# '2,3s/oldstring/newstring/' //修改[2,3](第二到第三行)
# '2,$s/oldstring/newstring/' //从第二行开始一直修改到最后一行
sed '2,${s/oldstring_0/newstring_0/;s/oldstring_1/newstring_1/}' filename.txt//执
行多条命令
sed '2d' filename.txt //删除第二行
sed '2,3d' filename.txt //删除指定行区间内容
sed '/string/d' filename.txt //删除指定字符串
sed '/1/,/3/d' filename.txt //从第一行开始删除,删除完第三行为止。
echo "Test Line 2" |sed 'i\Test Line 1' //在指定行前面插入新行
echo "Test Line 2" |sed 'a\Test Line 1' //在指定行后面插入新行
sed '3i\This is an inserted line.' filename.txt //将新行插到第三行前
sed '3a\This is an inserted line.' filename.txt //将新行插到第三行后
sed '$a\ This is a new line of text.'filename.txt //将新行插到最后一行后
sed '1i\This is one line of new text.\This is another line of new text.'filename.txt //插入多行文本
sed '3c\This is a changed line of text.'filename.txt //c:指定修改第几行,这里是将第三行改成指定替换内容
sed '/number 3/c\This is a changed line of text.'filename.txt //将包含number 3的行改
成指定替换内容
sed '2,3c\This is a changed line of text.'filename.txt //将第二和第三行改成指定替换
内容(即,一行文本替换两行文本)
sed 'y/123/789/' filename.txt //把原来内容中的123 分别转换为789,如果长度不同会产生错
误。
如:$ echo "This 1 is a test of 1 try." | sed 'y/123/456/'
This 4 is a test of 4 try.
sed -n '/3/{ p;s/line/test/p}' filename.txt//先用p命令打印原始行,再用s命令替换文本,
用p命令打印替换结果。
sed '=' filename.txt //打印行号
sed -n '/string/{=;p}' filename.txt //只显示包含匹配文本模式的行的行号和文本
sed 's/<.*>//g' filename.txt // 删除所有<>里面的内容,即删除HTML标签
sed 's/<[^>]*>//g;/^$/d' filename.txt// 前面的是删除:<title>This is the page
title</title>中的标签/^$/d:删除多余空白行
sed -n 'l' filename.txt //打印数据流中的文本和不可打印的ASCII字符:如,制表符:\t;换行符:$。
sed '3r added.txt' filename.txt //在filename文件第三行后插入added文件中的数据
sed '/string/r added.txt' filename.txt//在filename文件关键字所在行的后面插入added文件
sed '$r added.txt' filename.txt //在filename文件末尾添加文本
sed '/LIST/{r file11.txt;d}' filename.txt//在LIST所在行后插入文本,并删除LIST所在的行
##### 正则表达式识别的特殊字符:
. * [] ^ $ {} \ + ? | ()
前面需要加反斜杠\,告诉正则表达式引擎应该将接下来的字符当作普通的文本字符。
使用正斜杠出现在正则表达式中,就会得到一个错误,也必须使用\
正则表达式中,空格也是字符。
sed -n '/^this/p' file.txt //打印由this开头的行
sed -n '/s^/p' file.txt //^要放到文本模式开头,不然就是普通字符。
sed -n '/book$/p' file.txt //打印以book结尾的行
sed '/^$/d' file.txt //删除空白行
sed -n '/.at/p' file.txt //.表示只要是at前面有内容,都可以匹配。
sed -n '/[ch]at/p' file.txt //只匹配cat和hat的行,过滤掉只有at的行
sed -n '/[0123]/p' file.txt //匹配包含0123任一个数字的行
sed -n '/[^ch]at/p' file.txt //匹配c或h之外的任何字符及文本模式
sed -n '/ie*k/p' file.txt //可以匹配ik,iek,ieek,......e后面有一个*,表示e可以
出现0次或多次。
更多推荐
已为社区贡献2条内容
所有评论(0)