sed流编辑器

版权声明:qq:1263351411 https://blog.csdn.net/u013008795/article/details/88763409

4.5 sed 流编辑器

4.5.1 语法

sed [OIPTION]…{script-only-if-no-other-script} {input-file}…
sed [选项]… {脚本(如果没有其他脚本)} [输入文件]…

默认sed不编辑元文件,仅对模式空间中的数据做处理:而后,处理结束后,模式控件打印到屏幕

4.5.2 简单示例

示例1:【sed ‘’ abc.txt】显示abc.txt文件内容

[root@gdy103 ~]# sed '' abc.txt 
Hello word
www.xdd.cn
magedu:wq
[root@gdy103 ~]#

示例2:【ifconfig eth0 | sed -r '2!d;s#^.*:([0-9.]+) .*#\1#'】取出本地IPV4的地址

[root@gdy103 ~]# ifconfig eth0 | sed -r '2!d;s#^.*:([0-9.]+) .*#\1#'
192.168.61.255
[root@gdy103 ~]#

示例2:【sed -ri 's/^[#,[:blank:]]+//'g ./fstab】删除fstabe文件中所有以#开头或者以空白开头的首行的#和空白字符
在这里插入图片描述

4.5.3 常用参数

  • 【-n】静默模式,不在默认显示控件中的内容,只与命令相关
  • 【-i】直接修改源文件
  • 【-e SCRIPT -e SCRIPT】可以同时执行多个脚本 。
  • 【-f /PATH/TO/SED_SCRIPT】
    例如:【sed –f /path/to/script file】将script文件中保存的脚本,一个个读取操作文件
  • 【-r】使用扩展正则表达式

4.5.4 sed中脚本(AddressSCRIPT)的语法规则

  • 【StartLine(起始行),EndLine(结束行)】比如:【1,100】
    【$】表示最后一行
    【$-1】表示倒数第一行
    【0,$】表示从第一行到最后一行
  • 【/RegEXP/】正则表达式
  • 【/pattern1/,/pattern2/】第一次被pattern1(模式1)匹配到的行开始,至第一次被pattern2(模式2)匹配到的行结束,这中间的所有行
  • 【LineNumber】指定的行LineNumber
  • 【StartLine,+N】表示从startLine行开始,向后的N行
  • 【d】删除复合条件的行
    例如:【sed ‘1,2d’ /etc/fstab】删除fstab文件中的前两行显示其他到屏幕(源文件不做任何更改)
    例如:【sed ‘/oot/d’ /etc/fstab】//删除包含了oot的行再显示文件
  • 【p】显示复合条件的行
    例如:【sed ‘/^//p’ /etc/fstab】重复显示匹配到的行(也就是重复显示以【/】开头的行)
    如果只想显示匹配到的行可以使用【-n】选项
    例如:【sed -n ‘/^//p’ /etc/fstab】
  • 【a \string】在指定的行后面追加新行,最近内容为string
  • 【i \string】在指定的行前最佳新行,内容为string
    例如:【sed ‘/^//a # hello world’ /etc/fstab】在匹配的行的后面追加了“# hello world”
  • 【r filename】将指定的文件内容添加至复合条件的行处
    例如:【sed ‘2r /etc/issue’ /etc/fstab】 将/etc/issue文件内容添加到/etc/fstab文件中的第二行后面
  • 【w filename】将指定范围内的内容另存到指定文件中
    例如:【sed ‘/oot/w /tmp/oot.txt’ /etc/fstab】将匹配到的内容写入文件oot.txt中,如果文件存在,覆盖写入。如果不存在,创建写入
  • 【s/pattern/string/】或者【s@pattern@string@或者【s#pattern#pattern#】查找并替换(默认替换每一行中第一次被模式Pattern匹配到的字符串)
  • pattern模式能将匹配到的字符串替换成指定的字符串string(支持正则表达式)也就是将pattern匹配到的内容替换成string的内容
    • 查找并替换中的修饰符:
      【g】:全局替换
      【i】查找时忽略字符大小写
      【&】引用模式匹配到的整个串
      支持正则表达式的分组参数。
      例如:【ifconfig eth0 | sed -r '2!d;s#^.*:([0-9.]+) .*#\1#'】取出本地IPV4的地址
  • 常用例子:
    • 【sed ‘s/oot/OOT/’ /etc/fstab】或者【sed -e ‘1,$s/oot/OOT/’ /etc/fstab】将匹配到的行中oot替换成OOT,(注意:默认下能读取全文,所有这里匹配全文不必写)
    • 【sed ‘s/^//#/’ /etc/fstab】将文件中以/开头的字符换成#
    • 【sed ‘s///#/’ /etc/fstab】只替换每行中第一次匹配到的/换成#
    • 【sed ‘s///#/g’ /etc/fstab】替换每行中所有匹配到的/换成#
      注意:在’s///#/g’中使用的是/作为分隔符,也可以写成’s@/@#@g’或者’s / / #$g’那么与分隔符相同的字符就不必转译
  • 例如:【sed ‘s#l…e#&r#g’ sed.txt】或者【sed ‘s#(l…e)#\1r#g’ sed.txt】
    将l…e(以l开头e结尾的单词后面都加上r)
    注意:这里的&相当于引用模式匹配到的整个串(和后向引用一样)
    "\1"是后向引用
  • 例如:【sed ‘s#l(…e)#L\1e#g’ sed.txt】就可以将文件中like–>Like, love—>Love

4.5.5 帮助(sed --help)

[root@gdy103 ~]# 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  输出版本信息并退出

如果没有 -e, --expression, -f 或 --file 选项,那么第一个非选项参数被视为
sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准
输入读取数据。
GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
E-mail bug reports to: <[email protected]>.
Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.
[root@gdy103 ~]#

猜你喜欢

转载自blog.csdn.net/u013008795/article/details/88763409
今日推荐