每个人的声音都面向世界

木受绳则直,金就砺则利,君子博学而日参省乎己,则知明而行无过矣。

一个能打印它自身源代码的c程序

这段代码很有意思!能编译出来。程序的功能就是:打印它自己的c代码!!

#include <stdio.h>
char* recurse="#include <stdio.h>%cchar* recurse=%c%s%c;%cint main(){printf(recurse,10,34,recurse,34,10,10);}%c";
int main(){printf(recurse,10,34,recurse,34,10,10);}

这里也是(2009年在百度知道里面看到的)

main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);34;}",34);}

Shell History 命令扩展

shell history 命令扩展

  1. !^ 获取上一条命令的第一个参数。
  2. !$ 获取上一条命令的最后一个参数。
  3. !:n 获取上一条命令的第n个参数,n从1开始。(为0时则挑选出命令名称)
  4. !:n-x 获取上一条命令的第n个参数到第x个参数,n和x均从1开始。(为0时则挑选出命令名称)
  5. !* 获取上一条命令的所有参数。
  6. !n* n为数字,获取上一条命令的从第n个参数(含第n个参数)后的所有参数。
  7. !n- n为数字,获取上一条命令的从第n个参数(含第n个参数)后的除了最后一个参数外的所有参数。

Windows 下ffmpeg使用

列出设备

1. ffmpeg -list_devices true -f dshow -i dummy  

保存文件

1. ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 mycamera.mkv  

直接播放

1. ffplay -f dshow -i video="Integrated Camera"  

推流

1. ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -f flv rtmp://192.168.1.5/mytv/test1

录制屏幕

1. ffmpeg -f -dshow -s 1600x900 -r 50 -vcodec libx264 –preset:v ultrafast –tune:v zerolatency -crf 18 -f mpegts rtmp://192.168.1.5/mytv/test2      在Windows平台下,使用-dshow取代x11grab

-i 指定输入的文件 -acodec 指定输出文件的音频编码 -vcodec 指定输出文件的视频编码

最简单的抓屏:

ffmpeg -f gdigrab -i desktop out.mpg

从屏幕的(10,20)点处开始,抓取640x480的屏幕,设定帧率为5

ffmpeg -f gdigrab -framerate 5 -offset_x 10 -offset_y 20 -video_size 640x480 -i desktop out.mpg

//======================================================================= ffmpeg -ss START -t DURATION -i INPUT -vcodec copy -acodec copy OUTPUT 对上面的命令稍做个解释。 -ss 开始时间,如: 00:00:20,表示从20秒开始; -t 时长,如: 00:00:10,表示截取10秒长的视频; -i 输入,后面是空格,紧跟着就是输入视频文件; -vcodec copy 和 -acodec copy表示所要使用的视频和音频的编码格式,这里指定为copy表示原样拷贝; INPUT,输入视频文件; OUTPUT,输出视频文件; //=======================================================================

ffmpeg -f x11grab -s xga -r 10 -i :0.0+0+0 wheer.avi
-i video="screen-capture-recorder"

ffmpeg -f dshow -i video="DirectShow video devices" -f dshow -i audio="DirectShow audio devices" -pix_fmt yuv420p -vcodec libx264 -acodec libvo_aacenc -s 1280x720 -r 25 -q 10 -ar 44100 -ac 2 -tune zerolatency -preset ultrafast -f mpegts - | ffmpeg -f mpegts -i - -c copy -bsf:a aac_adtstoasc -f flv temp.flv

-r选项设置每秒提取图片的帧数。 -q:v 2 设置输出文件的视频质量为:优

截取一张352x240尺寸大小的,格式为jpg的图片

ffmpeg -i 1.mp4 -y -f image2 -t 120.001 -s 352x240 a.jpg

把视频的前30帧转换成一个Animated Gif :

ffmpeg -i 1.mp4 -vframes 30 -y -f gif a.gif

生成缩略图

ffmpeg -i 1.mp4 -y -f image2 -ss 08.010 -t 0.001 -s 352x240 b.jpg

列出本机设备

ffmpeg -list_devices true -f dshow -i dummy

从视频中生成gif图片

ffmpeg -i 1.mp4 -ss 10 -t 10   -s 480x360  tutu.gif

-ss 指从 10s 开始转码,-t 指转换 10s 的视频 -s 指定尺寸

rtmp://video-center.alivecdn.com/AppName/StreamName?vhost=zhibo.busionline.com

前言:FFmpeg是做音视频开发的一个优秀的开源库,可以在不同平台下编译,能够实现视频采集、视频格式转化、视频截图、视频添加水印、视频切片、视频录制、视频推流、更改音视频参数功能等。通过终端命令及开发时如何实现这些功能,本文做一整理记录,以备不时之需。下面共四组命令。

第一组

1.分离视频音频流

ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流

2.视频解复用

ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264

ffmpeg –i test.avi –vcodec copy –an –f m4v test.264

3.视频转码

ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264

//转码为码流原始文件

ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264 //转码为码流原始文件

ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi //转码为封装文件

说明:-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制

4.视频封装

ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file

5.视频剪切

ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg //提取图片

ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi //剪切视频//-r 提取图像的频率,-ss 开始时间,-t 持续时间

6.视频录制

ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi

7、利用ffmpeg视频切片

主要把视频源切成若干个.ts格式的视频片段然后生成一个.m3u8的切片文件索引提供给html5的video做hls直播源

命令如下:

ffmpeg -i 视频源地址 -strict -2 -c:v libx264 -c:a aac -f hls m3u8文件输出地址

8、ffmpeg缩放视频

假设原始视频尺寸是 1080p(即 1920×1080 px,16:9),使用下面命令可以缩小到 480p:(ps:以下这个命令,据说违反微信平台相关法律,蛋疼,用不了文字,只能用图片了)

各个参数的含义:-i a.mov 指定待处理视频的文件名-vf scale=853:480 vf 参数用于指定视频滤镜,其中 scale 表示缩放,后面的数字表示缩放至 853×480 px,其中的 853px 是计算而得,因为原始视频的宽高比为 16:9,所以为了让目标视频的高度为 480px,则宽度 = 480 x 9 / 16 = 853-acodec aac 指定音频使用 aac 编码。注:因为 ffmpeg 的内置 aac 编码目前还是试验阶段,故会提示添加参数 “-strict -2” 才能继续,尽管添加即可。又或者使用外部的 libfaac(需要重新编译 ffmpeg)。-vcodec h264 指定视频使用 h264 编码。注:目前手机一般视频拍摄的格式(封装格式、文件格式)为 mov 或者 mp4,这两者的音频编码都是 aac,视频都是 h264。out.mp4 指定输出文件名上面的参数 scale=853:480 当中的宽度和高度实际应用场景中通常只需指定一个,比如指定高度为 480 或者 720,至于宽度则可以传入 “-1” 表示由原始视频的宽高比自动计算而得。即参数可以写为:scale=-1:480,当然也可以 scale=480:-1

9、ffmpeg裁剪

有时可能只需要视频的正中一块,而两头的内容不需要,这时可以对视频进行裁剪(crop),比如有一个竖向的视频 1080 x 1920,如果指向保留中间 1080×1080 部分命令如下:ffmpeg -i 视频源地址 -strict -2 -vf crop=1080:1080:0:420 视频输出地址(如:out.mp4)

其中的 crop=1080:1080:0:420 才裁剪参数,具体含义是 crop=width:height:x:y,其中 width 和 height 表示裁剪后的尺寸,x:y 表示裁剪区域的左上角坐标。比如当前这个示例,我们只需要保留竖向视频的中间部分,所以 x 不用偏移,故传入0,而 y 则需要向下偏移:(1920 – 1080) / 2 = 420

  1. 转视频格式

    ffmpeng -i source.mp4 -c:v libx264 -crf 24 destination.flv

其中 -crf 很重要,是控制转码后视频的质量,质量越高,文件也就越大。

此值的范围是 0 到 51:0 表示高清无损;23 是默认值(如果没有指定此参数);51 虽然文件最小,但效果是最差的。

值越小,质量越高,但文件也越大,建议的值范围是 18 到 28。而值 18 是视觉上看起来无损或接近无损的,当然不代表是数据(技术上)的转码无损。

第二组

1.ffmpeg 把文件当做直播推送至服务器 (RTMP + FLV)

ffmpeg - re -i demo.mp4 -c copy - f flv rtmp://w.gslb.letv/live/streamid

2.将直播的媒体保存到本地

ffmpeg -i rtmp://r.glsb.letv/live/streamid -c copy streamfile.flv

3.将一个直播流,视频改用h264压缩,音频改用faac压缩,送至另一个直播服务器

ffmpeg -i rtmp://r.glsb.letv/live/streamidA -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://w.glsb.letv/live/streamb

4.提取视频中的音频,并保存为mp3 然后输出

ffmpeg -i input.avi -b:a 128k output.mp3
  1. 将mp3转为pcm

    ffmpeg-iinput.mp3-fs16be-acodecpcm_s16beoutput.pcm

第三组

1.获取视频的信息

ffmpeg -i video.avi

2.将图片序列合成视频

ffmpeg -f image2 -i image%d.jpg video.mpg

上面的命令会把当前目录下的图片(名字如:image1.jpg. image2.jpg. 等…)合并成video.mpg

3.将视频分解成图片序列

ffmpeg -i video.mpg image%d.jpg

上面的命令会生成image1.jpg. image2.jpg. …

支持的图片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI

4.为视频重新编码以适合在iPod/iPhone上播放

ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4

5.为视频重新编码以适合在PSP上播放

ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4

6.从视频抽出声音.并存为Mp3

ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3

7.将wav文件转成Mp3

ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3

8.将.avi视频转成.mpg

ffmpeg -i video_origine.avi video_finale.mpg

9.将.mpg转成.avi

ffmpeg -i video_origine.mpg video_finale.avi

10.将.avi转成gif动画(未压缩)

ffmpeg -i video_origine.avi gif_anime.gif

11.合成视频和音频

ffmpeg -i son.wav -i video_origine.avi video_finale.mpg

12.将.avi转成.flv

ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv

13.将.avi转成dv

ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv

或者:

ffmpeg -i video_origine.avi -target pal-dv video_finale.dv

14.将.avi压缩成divx

ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi

15.将Ogg Theora压缩成Mpeg dvd

ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_terminate.mpg

16.将.avi压缩成SVCD mpeg2

NTSC格式:

ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg

PAL格式:

ffmpeg -i video_origine.avi -target pal-dvcd video_finale.mpg

17.将.avi压缩成VCD mpeg2

NTSC格式: 
ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg

PAL格式:

ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg

18.多通道编码

ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

19.从flv提取mp3

ffmpeg -i source.flv -ab 128k dest.mp3

第四组

1、将文件当做直播送至live

ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName

2、将直播媒体保存至本地文件

ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

3、将其中一个直播流,视频改用h264压缩,音频不变,送至另外一个直播服务流

ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream

4、将其中一个直播流,视频改用h264压缩,音频改用faac压缩,送至另外一个直播服务流

ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream

5、将其中一个直播流,视频不变,音频改用faac压缩,送至另外一个直播服务流

ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream

6、将一个高清流,复制为几个不同视频清晰度的流重新发布,其中音频不变

ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k

7、功能一样,只是采用-x264opts选项

ffmpeg -re -i rtmp://server/live/high_FMLE_stream -c:a copy -c:v x264lib -s 640×360 -x264opts bitrate=500:profile=baseline:preset=slow rtmp://server/live/baseline_500k -c:a copy -c:v x264lib -s 480×272 -x264opts bitrate=300:profile=baseline:preset=slow rtmp://server/live/baseline_300k -c:a copy -c:v x264lib -s 320×200 -x264opts bitrate=150:profile=baseline:preset=slow rtmp://server/live/baseline_150k -c:a libfaac -vn -b:a 48k rtmp://server/live/audio_only_AAC_48k

8、将当前摄像头及音频通过DSSHOW采集,视频h264、音频faac压缩后发布

ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name

9、将一个JPG图片经过h264压缩循环输出为mp4视频

ffmpeg.exe -i INPUT.jpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUT.mp4

10、将普通流视频改用h264压缩,音频不变,送至高清流服务(新版本FMS live=1)

ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv “rtmp://server/live/h264Stream live=1〃

Htop是个好东西

Htop是一款运行于Linux系统监控与进程管理软件,用于取代Unix下传统的top。与top只提供最消耗资源的进程列表不同,htop提供所有进程的列表,并且使用彩色标识出处理器、swap和内存状态。

用户一般可以在top无法提供详尽系统信息的情况下选择安装并使用htop。比如,在查找应用程序的内存泄漏问题时。与top相比,htop提供更方便、光标控制的界面来杀死进程。 htop用C语言编写,采用了ncurses库。htop的名称源于其作者的名字。

安装htop

yum -y install ncurses-devel #htop依赖ncurses
cd /opt
wget -c http://ncu.dl.sourceforge.net/project/htop/htop/1.0.2/htop-1.0.2.tar.gz
tar xzf htop-1.0.2.tar.gz
cd htop-1.0.2
./configure
make && make install

示例图片

示例图片

Htop是个好东西

Htop是一款运行于Linux系统监控与进程管理软件,用于取代Unix下传统的top。与top只提供最消耗资源的进程列表不同,htop提供所有进程的列表,并且使用彩色标识出处理器、swap和内存状态。

用户一般可以在top无法提供详尽系统信息的情况下选择安装并使用htop。比如,在查找应用程序的内存泄漏问题时。与top相比,htop提供更方便、光标控制的界面来杀死进程。 htop用C语言编写,采用了ncurses库。htop的名称源于其作者的名字。

安装-htop

yum -y install ncurses-devel #htop依赖ncurses
cd /opt
wget -c http://ncu.dl.sourceforge.net/project/htop/htop/1.0.2/htop-1.0.2.tar.gz
tar xzf htop-1.0.2.tar.gz
cd htop-1.0.2
./configure
make && make install

示例图片

示例图片

Css-clearfix

<style>
.clearfix:after{
    visibility: hidden;
    display: block;
    font-size: 0;
    content: ".";
    clear: both;
    height: 0;
}

* html .clearfix{zoom: 1;}
*:first-child + html .clearfix{zoom: 1;}
</style>
<div class="clearfix" style="border: 2px solid red;">
    <div style="float: left; width: 80px; height: 80px; border: 1px solid blue;">TEST DIV</div>
</div>

说明:

  1. 首先是利用:after这个伪类来兼容FF、Chrome等支持标准的浏览器。:after伪类IE不支持,它用来和content属性一起使用设置在对象后的内容,例如:a:after{content:“(link)”;}这个CSS将会让a标签内的文本后边加上link文本文字。
  2. 利用“* html”这个只有IE6认识的选择符,设置缩放属性“zoom: 1;”实现兼容IE6。
  3. 利用“*:first-child + html”这个只有IE7认识的选择符,设置缩放属性“zoom: 1;”实现兼容IE7。

经营一个网站需要哪些牌照资质

  • 信息产业部ICP备案,主要是针对非经营性网站,任何一个在国内的网站都要备案。审批机构:工业与信息化部
  • 电信与信息服务业务经营许可证(ICP)主要是针对经营性互联网信息服务网站,注册资金要求100万以上,北京的证叫这个名字,全国其它地方的证的名称为“增值电信业务经营许可证”,经营范围为 互联网信息服务业务。审批机构:各地通信管理局
  • 电子公告服务:电信业务审批主要是针对设有电子公告服务(bbs)论坛网站。审批机构:各 地通信管理局
  • 经营性网站备案,经营性网站备案,是指经营性网站向工商行政管理机关申请备案,工商行政管 理机关在网站的首页上加贴经营性网站备案电子标识,并将备案信息向社会公开。审批机构:北京市工商行政管理局
  • 增值电信业务经营许可证(移动网信息服务业务SP)主要是针对提供移动网无线增值信息服 务业务需要办理的。审批机构:各地通信管理局
  • 互联网新闻信息服务许可证主要针对从事登载新闻业务的网站。审批机构:国务院新闻办
  • 网络文化经营许可证主要针对经营互联网文化产品和提供互联网文化产品及其服务的网站。审批机构:省级文化行政部门(2010.08.01日开始下放到省级)
  • 互联网药品信息服务资格证书主要针对经营互联网药品信息服务的网站。审批机构:北京 市药品监督管理局
  • 互联网出版许可证主要针对经营互联网出版类电子商务业务的网站。审批机构:新闻出版总署
  • 网络视听节目传播许可证(有新旧之分,新的目前据传只有5家)信息网络视听节目许可证》由广电总局按照信息网络传播视听节目的业务类别、接收终端、传输网络等项目分类核发。 审批机构:广电总局
  • 互联网卫生信息服务管理主要针对经营互联网卫生信息服务业务的网站。审批机构:北京市卫生局
  • 电子支付牌照(即将推出)主要是对电子支付企业实行牌照制度,传闻在今年第一季度发放,大概包括支付宝在内的10家公司可获得牌照。 审批机构:中国人民银行

MySQL 的 Prompt 转义字符

\c    :A counter that increments for each statement you issue
\D    :The full current date
\d    :The default database
\h    :The server host
\l    :The current delimiter (new in 5.1.12)
\m    :Minutes of the current time
\n    :A newline character
\O    :The current month in three-letter format (Jan, Feb, …)
\o    :The current month in numeric format
\P    :am/pm
\p    :The current TCP/IP port or socket file
\R    :The current time, in 24-hour military time (0–23)
\r    :The current time, standard 12-hour time (1–12)
\S    :Semicolon
\s    :Seconds of the current time
\t    :A tab character
\U    :Your full user_name@host_name account name
\u    :Your user name
\v    :The server version
\w    :The current day of the week in three-letter format (Mon, Tue, …)
\Y    :The current year, four digits
\y    :The current year, two digits
\_    :A space
\A    :space (a space follows the backslash)
\'    :Single quote
\"    :Double quote
\\    :A literal “\” backslash character
\x    :x, for any “x” not listed above

Sed-man-page

NAME sed - stream editor for filtering and transforming text

SYNOPSIS sed [OPTION]… {script-only-if-no-other-script} [input-file]…

DESCRIPTION Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed’s ability to filter text in a pipeline which particularly distinguishes it from other types of editors.

   -n, --quiet, --silent

          suppress automatic printing of pattern space

   -e script, --expression=script

          add the script to the commands to be executed

   -f script-file, --file=script-file

          add the contents of script-file to the commands to be executed

   --follow-symlinks

          follow symlinks when processing in place

   -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if SUFFIX supplied)

   -b, --binary

          open files in binary mode (CR+LFs are not processed specially)

   -l N, --line-length=N

          specify the desired line-wrap length for the `l' command

   --posix

          disable all GNU extensions.

   -r, --regexp-extended

          use extended regular expressions in the script.

   -s, --separate

          consider files as separate rather than as a single continuous long stream.

   -u, --unbuffered

          load minimal amounts of data from the input files and flush the output buffers more often

   -z, --null-data

          separate lines by NUL characters

   --help
          display this help and exit

   --version
          output version information and exit

   If no -e, --expression, -f, or --file option is given, then the first non-option  argument  is  taken  as  the  sed
   script  to  interpret.  All remaining arguments are names of input files; if no input files are specified, then the
   standard input is read.

   GNU sed home page: <http://www.gnu.org/software/sed/>.  General help using GNU software:  <http://www.gnu.org/geth‐
   elp/>.   E-mail  bug  reports  to:  <bug-sed@gnu.org>.  Be sure to include the word ``sed'' somewhere in the ``Sub‐
   ject:'' field.

COMMAND SYNOPSIS This is just a brief synopsis of sed commands to serve as a reminder to those who already know sed; other documen‐ tation (such as the texinfo document) must be consulted for fuller descriptions.

Zero-address “commands” : label Label for b and t commands.

   #comment
          The comment extends until the next newline (or the end of a -e script fragment).

   }      The closing bracket of a { } block.

Zero- or One- address commands = Print the current line number.

   a \

   text   Append text, which has each embedded newline preceded by a backslash.

   i \

   text   Insert text, which has each embedded newline preceded by a backslash.

   q [exit-code]
          Immediately quit the sed script without processing any more input, except that if auto-print is not disabled
          the current pattern space will be printed.  The exit code argument is a GNU extension.

   Q [exit-code]
          Immediately quit the sed script without processing any more input.  This is a GNU extension.

   r filename
          Append text read from filename.

   R filename
          Append a line read from filename.  Each invocation of the command reads a line from the file.  This is a GNU
          extension.

Commands which accept address ranges { Begin a block of commands (end with a }).

   b label
          Branch to label; if label is omitted, branch to end of script.

   c \

   text   Replace the selected lines with text, which has each embedded newline preceded by a backslash.

   d      Delete pattern space.  Start next cycle.

   D      If  pattern  space contains no newline, start a normal new cycle as if the d command was issued.  Otherwise,
          delete text in the pattern space up to the first newline, and  restart  cycle  with  the  resultant  pattern
          space, without reading a new line of input.

   h H    Copy/append pattern space to hold space.

   g G    Copy/append hold space to pattern space.

   l      List out the current line in a ``visually unambiguous'' form.

   l width
          List  out  the  current line in a ``visually unambiguous'' form, breaking it at width characters.  This is a
          GNU extension.

   n N    Read/append the next line of input into the pattern space.

   p      Print the current pattern space.

   P      Print up to the first embedded newline of the current pattern space.

   s/regexp/replacement/
          Attempt to match regexp against the pattern  space.   If  successful,  replace  that  portion  matched  with
          replacement.   The  replacement  may contain the special character & to refer to that portion of the pattern
          space which matched, and the special escapes \1 through \9 to  refer  to  the  corresponding  matching  sub-
          expressions in the regexp.

   t label
          If  a  s///  has done a successful substitution since the last input line was read and since the last t or T
          command, then branch to label; if label is omitted, branch to end of script.

   T label
          If no s/// has done a successful substitution since the last input line was read and since the last t  or  T
          command, then branch to label; if label is omitted, branch to end of script.  This is a GNU extension.

   w filename
          Write the current pattern space to filename.

   W filename
          Write the first line of the current pattern space to filename.  This is a GNU extension.

   x      Exchange the contents of the hold and pattern spaces.

   y/source/dest/
          Transliterate  the  characters in the pattern space which appear in source to the corresponding character in
          dest.

Addresses Sed commands can be given with no addresses, in which case the command will be executed for all input lines; with one address, in which case the command will only be executed for input lines which match that address; or with two addresses, in which case the command will be executed for all input lines which match the inclusive range of lines starting from the first address and continuing to the second address. Three things to note about address ranges: the syntax is addr1,addr2 (i.e., the addresses are separated by a comma); the line which addr1 matched will always be accepted, even if addr2 selects an earlier line; and if addr2 is a regexp, it will not be tested against the line that addr1 matched.

   After the address (or address-range), and before the command, a !  may be inserted, which specifies that  the  com‐
   mand shall only be executed if the address (or address-range) does not match.

   The following address types are supported:

   number Match  only  the  specified line number (which increments cumulatively across files, unless the -s option is
          specified on the command line).

   first~step
          Match every step'th line starting with line first.  For example, ``sed -n 1~2p'' will print all the odd-num‐
          bered  lines in the input stream, and the address 2~5 will match every fifth line, starting with the second.
          first can be zero; in this case, sed operates as if it were equal to step.  (This is an extension.)

   $      Match the last line.

   /regexp/
          Match lines matching the regular expression regexp.

   \cregexpc
          Match lines matching the regular expression regexp.  The c may be any character.

   GNU sed also supports some special 2-address forms:

   0,addr2
          Start out in "matched first address" state, until addr2 is found.  This is similar to 1,addr2,  except  that
          if  addr2 matches the very first line of input the 0,addr2 form will be at the end of its range, whereas the
          1,addr2 form will still be at the beginning of its range.  This works only when addr2 is a  regular  expres‐
          sion.

   addr1,+N
          Will match addr1 and the N lines following addr1.

   addr1,~N
          Will  match addr1 and the lines following addr1 until the next line whose input line number is a multiple of
          N.

REGULAR EXPRESSIONS POSIX.2 BREs should be supported, but they aren’t completely because of performance problems. The \n sequence in a regular expression matches the newline character, and similarly for \a, \t, and other sequences.

BUGS E-mail bug reports to bug-sed@gnu.org. Also, please include the output of “sed –version” in the body of your report if at all possible.

AUTHOR Written by Jay Fenlason, Tom Lord, Ken Pizzini, and Paolo Bonzini. GNU sed home page: <http://www.gnu.org/soft%E2%80%90 ware/sed/>. General help using GNU software: http://www.gnu.org/gethelp/. E-mail bug reports to: . Be sure to include the word “sed” somewhere in the “Subject:” field.

COPYRIGHT Copyright © 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

SEE ALSO awk(1), ed(1), grep(1), tr(1), perlre(1), sed.info, any of various books on sed, the sed FAQ (http://sed.sf.net/grabbag/tutorials/sedfaq.txt), http://sed.sf.net/grabbag/.

   The full documentation for sed is maintained as a Texinfo manual.  If the info and sed programs are properly
   installed at your site, the command

          info sed

   should give you access to the complete manual.

sed 4.2.2 June 2013 SED(1)

html-DocType

<!doctype html>

  1. 所有浏览器都支持 <!DOCTYPE> 声明。
  2. <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 标签之前。
  3. <!DOCTYPE> 声明不是 HTML 标签;它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令。
  4. 在 HTML 4.01 中,<!DOCTYPE> 声明引用 DTD,因为 HTML 4.01 基于 SGML。
  5. DTD 规定了标记语言的规则,这样浏览器才能正确地呈现内容。
  6. HTML5 不基于 SGML,所以不需要引用 DTD。
  7. <!DOCTYPE> 声明没有结束标签。
  8. <!DOCTYPE> 声明对大小写不敏感。

提示:请始终向 HTML 文档添加 <!DOCTYPE> 声明,这样浏览器才能获知文档类型。

  • HTML 1991
  • HTML+ 1993
  • HTML 2.0 1995
  • HTML 3.2 1997
  • HTML 4.01 1999
  • XHTML 1.0 2000
  • HTML5 2012
  • XHTML5 2013

常用的 DOCTYPE 声明如下 HTML 5 <!DOCTYPE html>

HTML 4.01 Strict

该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3.org/TR/html4/strict.dtd”>

HTML 4.01 Transitional

该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>

HTML 4.01 Frameset

该 DTD 等同于 HTML 4.01 Transitional,但允许框架集内容。 <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Frameset//EN” “http://www.w3.org/TR/html4/frameset.dtd”>

XHTML 1.0 Strict

该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。必须以格式正确的 XML 来编写标记。 <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>

XHTML 1.0 Transitional

该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。必须以格式正确的 XML 来编写标记。 <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

XHTML 1.0 Frameset

该 DTD 等同于 XHTML 1.0 Transitional,但允许框架集内容。 <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Frameset//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd”>

XHTML 1.1

该 DTD 等同于 XHTML 1.0 Strict,但允许添加模型(例如提供对东亚语系的 ruby 支持)。 <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.1//EN” “http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd”>