2019-03-31 18:05:31 Jerry_1126 阅读数 2102

sed中的常用往后插入的语法,比如往匹配到的行后面添加内容,可以使用-i参数和a参数来往后插入

[root@linux ~#] sed -i '/Pattern/ a\String' FileName

如果要插入的是个变量,则需要将注意两点:

  • 使用双引号来替代单引号
  • 使用反斜杠对\进行转译

下面就是个示例。示例文件: 1.txt,要往第四行后面添加字符串var="New Line Here."

This is line 1.
This is line 2.
This is line 3.
This is line 4.
This is line 5.
This is line 6.

 就可以这样做:

[root@linux ~#] var="New Line Here."
[root@linux ~#] sed -i "/This is line 4/ a\\$var" 1.txt
This is line 1.
This is line 2.
This is line 3.
This is line 4.
New Line Here.
This is line 5.
This is line 6.

 

2018-10-09 11:01:02 Thanksgining 阅读数 281

sed -i   ——>修改

sed -n  ——>查看

#sed中带变量

sed -i ''$num'd' test.txt               -->删除指定行的内容,其中num变量表示行数

 

插入

#sed插入到文件末尾(新的一行)

sed -i '$a\插入内容' 文件名

sed -i '$a\'$变量名'' 文件名

#sed插入到文件开头(新的一行)

sed -i '1i\插入内容' 文件名

sed -i '1i\'$变量名'' $PRELOADER_FILE

#sed替换字符串

sed -i "s/$变量a/$变量b/g" $PRELOADER_FILE     -->后面跟的‘g’表示全部

#sed修改指定行

sed -i "41c${CON1}" $FILE1  ---将文件1的第41行更改为con1变量的内容

#sed在每一行添加一个回车

 sed '/$/a\\n' 文件名

 

删除

#sed删除某一特定字符串的行

sed -i '/关键字符串/d' 文件名     -->-i 表示直接修改读取的档案内容,而不是由萤幕输出

#sed删除特定行

sed -i '1d' 文件名                       -->删除第一行

sed -i '$d' 文件名                       -->删除最后一行

sed -i '1,2d' 文件名                    -->删除第一行到第二行

sed -i '2,$d' 文件名                    -->删除第二行到最后一行

 

显示

#sed显示特定行

sed -n '1d' 文件名                       -->删除第一行

sed -n '$d' 文件名                       -->删除最后一行

sed -n '1,2d' 文件名                    -->删除第一行到第二行

sed -n '2,$d' 文件名                    -->删除第二行到最后一行

#查找特定字符串,并获取第一次出现的行数

num=$(grep -nrs "特定字符串" 文件名 | awk -F ':' '{print $1}' | sed -n '1p;1q')

#查找特定字符串,并获取最后一次出现的行数

num=$(grep -nrs "特定字符串" 文件名 | awk -F ':' '{print $1}' | sed -n '$p;$q')

    

2014-11-08 11:43:06 fwq11223344 阅读数 2731

sed使用语法
[root@fwq test]# sed --help
用法: sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...

  -n, --quiet, --silent                 取消自动打印模式空间
  -e 脚本, --expression=脚本                 添加“脚本”到程序的运行列表
  -f 脚本文件, --file=脚本文件                 添加“脚本文件”到程序的运行列表
  --follow-symlinks                 follow symlinks when processing in place; hard links will still be broken.
  -i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if extension supplied).
                 The default operation mode is to break symbolic and hard links.
                 This can be changed with --follow-symlinks and --copy.
  -c, --copy
                 use copy instead of rename when shuffling files in -i mode.
                 While this will avoid breaking links (symbolic or hard), the
                 resulting editing operation is not atomic.  This is rarely
                 the desired mode; --follow-symlinks is usually enough, and
                 it is both faster and more secure.
  -l N, --line-length=N                 指定“l”命令的换行期望长度
  --posix                 关闭所有 GNU 扩展
  -r, --regexp-extended                 在脚本中使用扩展正则表达式
  -s, --separate                 将输入文件视为各个独立的文件而不是一个长的连续输入
  -u, --unbuffered                 从输入文件读取最少的数据,更频繁的刷新输出
      --help     打印帮助并退出
      --version  输出版本信息并退出

 

 

打印出行号,并删除2-5行

[root@fwq test]# nl /etc/passwd | sed '2,5d' |more
 
    1  root:x:0:0:root,704,03738888766,03738888766:/root:/bin/bash
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

打印出行号,只删除2-5行

[root@fwq test]# nl /etc/passwd | sed '2d' |more
     1  root:x:0:0:root,704,03738888766,03738888766:/root:/bin/bash
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

打印出行号,删除第2行以后所有内容

[root@fwq test]# nl /etc/passwd | sed '2,$d'
     1  root:x:0:0:root,704,03738888766,03738888766:/root:/bin/bash
[root@fwq test]#

打印出行号,在第2行后加上“drink tea”

[root@fwq test]# nl /etc/passwd |sed '2a drink tea' | more
     1  root:x:0:0:root,704,03738888766,03738888766:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin

打印出行号,加入2行“drink tea or drink beer”

[root@fwq test]# nl /etc/passwd |sed '2a drink tea or ...\
drink beer?' | more
     1  root:x:0:0:root,704,03738888766,03738888766:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
drink tea or ...
drink beer?
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin

打印出行号,将第2-5行的内容更换成“No 2-5”

[root@fwq test]# nl /etc/passwd | sed '2,5c No 2-5 number' | more
     1  root:x:0:0:root,704,03738888766,03738888766:/root:/bin/bash
No 2-5 number
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt

打印出行号,仅列出第5-7行的内容

[root@fwq test]# nl /etc/passwd | sed -n '5,7p'
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

 

2012-12-06 22:13:58 BOBO12082119 阅读数 3751
sed:是一个非交互性文本流编辑器,可编辑大或小的文件,sed命令定时编辑,删除文件;
一次性处理所有改变。
sed不与原文件打交道,只是操作源文件的一个拷贝,然后所有的改动输出到一个文件,并输出到屏幕。

调用sed的三种方式:
1.命令行键入命令
2.将sed命令插入脚本文件,然后调用sed
3.将sed命令插入脚本文件,并使sed脚本可执行?自动执行?

调用sed
1.命令格式
sed [选项] sed命令 输入文件
2.使用sed脚本
sed [选项] -f sed脚本文件 输入文件
3.使用第一行具有sed命令解释器的sed脚本文件
sed脚本 [选项] 输入文件

选项:
n	不打印
c	下一命令是编辑命令[无用]
f	正在调用sed脚本文件

保存sed命令,可以使用重定向方式:sed 'sed_cmd' input_file > outfile

sed浏览文件时,默认从第一行开始浏览,若想定位文本,有2种方式:
1.使用行号,单行或多行(范围)
2.正则表达式

使用sed在文件中定位文本的方式
——————————————————————————————————————————————————————————————————
x			x为行号,如1
x,y			表示行号范围从x到y
/pattern/		查询包含模式的行。例如/disk/或/[a-z]/
/pattern/pattern/	查询包含两个模式的行,例如/disk/disks/
pattern/,x		在给定行号上查询包含模式的行,例如/ribbon/,3
x,/pattern/		通过行号和模式查询匹配行,3,/vdu/
x,y!			查询不包含指定行号x和y的行,1,2!
——————————————————————————————————————————————————————————————————

sed编辑命令
————————————————————————————————————————————————————————
p		打印匹配行
=		显示文件行号
a\		在定位行号后附加新文本信息
i\		在定位行号后插入新文本信息
d		删除定位行
c\		在新文本替换定位文本
s		使用替换模式替换相应模式
r		从另一个文本中读取文本
w		写文本到一个文件
q		第一个模式匹配完成后推出或立即推出
l		显示与八进制ASCII代码等价的控制字符
{}		在定位行执行的命令组
n		从另一个文本中读取下一行,并附加在下一行
g		将模式2粘贴到/pattern n/
y		传递字符
n		延续到下一输入行;允许跨行的模式匹配语句
——————————————————————————————————————————————————————————
建立一个文件:
vi quote.txt
pg quote.txt
the honeysuckle band played all night long for noly $90.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P.Neave was in attendance.

打印首行:
sed -n '1p' quote.txt
The honeysuckle band played all night long for noly $90.

打印最后一行:
sed -n '$p' quote.txt
The local nurse Miss P.Neave was in attendance.

打印整个文件,格式:1,$p
sed -n '1,$p' quote.txt
The honeysuckle band played all night long for noly $90.
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:10.
The local nurse Miss P.Neave was in attendance.

打印指定行
sed -n '4p' quote.txt
The local nurse Miss P.Neave was in attendance.

使用正则表达式
打印包含was单词的行;
sed -n '/was/'p  quote.txt[or sed -n '/was/p'  quote.txt]
It was an evening of splendid music and company.
The local nurse Miss P.Neave was in attendance.


检索数据:打印出现以ing结尾单词的行
sed -n '/.*ing/'p quote.txt
It was an evening of splendid music and company.

查找包含$符号的行:
sed -n '/\$/'p quote.txt
The honeysuckle band played all night long for noly $90.

筛选出一行,格式:line_num,/pattern/
sed -n '4,/was/'p quote.txt
The local nurse Miss P.Neave was in attendance.

打印每行的行号:
sed -e '=' quote.txt
1
The honeysuckle band played all night long for noly $90.
2
It was an evening of splendid music and company.
3
Too bad the disco floor fell through at 23:10.
4
The local nurse Miss P.Neave was in attendance.

打印包含was单词的行的行号:
sed -n '/was/=' quote.txt
2
4

包含was的行:
sed -n '/was/'p quote.txt
It was an evening of splendid music and company.
The local nurse Miss P.Neave was in attendance.

打印包含music的行号,和行数据:
sed -e '/music/=' -n -e '/music/p' quote.txt
2
It was an evening of splendid music and company.
--the end--

sed 使用方法

阅读数 11

sed行定位的使用

阅读数 1972

没有更多推荐了,返回首页