网站地图 | RSS订阅 老铁博客 - 上海SEO优化|上海网站建设|蜘蛛池出租|站群代搭建
你的位置:首页 » 前端脚本 » 正文

sed命令,linux下sed命令

2020-7-15 13:53:24 | 作者:老铁SEO | 0个评论 | 人浏览

  在shell中输入下面的命令,输出是什么


  echos/\^/,/g


  输出是s/^/,/g,在shell中反斜杠本身就有转义的作用,因此不加双引号实际执行的命令是


  sed"/^/,/g"file>file1即在文本开头添加一个逗号


  加上双引号\^在传给sed之前才不会被转义成^


  关于Linux里的sed命令。


  Sedisanondestructiveeditor.Itwilldisplaytheeditsyoumakeonyourscreen,butitwillnotchangethefileyouareediting.Toreallyreflecttheeditsinthefile,youmustredirecttheoutputtoanotherfile,andthenrenametheorginalfile


  sed的特点就是非破坏(nondestructive),流水行(streamlined),非交互(noninteractive)的编辑器。


  非破坏就是指不会修改原文件,它会将修改的结果标准输出到屏幕上,你如果想保存,需要使用IO重定向的方式保存:


  如:


  sed‘s/home/home1’1.txt>2.txt


  这样做的原因是,如果你修改了原文件的话,你没法使用word,vim,txt的undo功能撤销修改,恢复原来的文件。所以,sed会将修改之后的文件输出到屏幕,你看到修改满意的话,再重定向到其他文件。就完成了修改。明白否?


  -e是启用多行命令上述两条编辑命令都是一行命令,所以看不出效果。


  linux指令sed指令怎么选择列


  首先我这边先建一个字母大小转换的脚本test2.sh,内容如下:


  先介绍些sed-n的应用:


  sed命令中p能实现打印匹配行的功能。我们可以实际看下sed命令带-n和不带-n情况下有什么不同。


  sed-n"1p"test2.sh:带-n选项的话,只打印test2.sh脚本第一行匹配行。


  sed"1p"test2.sh:不带-n的话,不仅打印第一行匹配行,还打印输出test2.sh脚本的全部内容。


  sed-n还可以打印文件的范围,比如打印test2.sh脚本的前两行,我们就可以执行以下命令:sed-n"1,2p"test2.sh,就可以直接打印前两行。


  sed命令可以打印匹配模式行,比如打印test2.sh脚本匹配tr的行,就可以执行以下命令:


  sed-n/tr/ptest2.sh。


  remark:如果不带-n的话,除了打印匹配行外,还会打印脚本的全部内容。


  sed-e的应用。只有当sed命令传递多个编辑命令式,才会使用到-e。比如:我想打印/tr/匹配行,并且打印匹配行所在的行号,此时存在多个sed参数,就要用到-e了。


  sed-n-e/tr/p-e/tr/=test2.sh


  每个参数前都要带上-e:


  seda\追加命令,命令格式为:sed’指定地址a\追加内容‘目标文件


  这个追加内容在匹配行的下一行,只会输出到标准输出,原文件内容是不变的,例如在test2.sh脚本的/tr/所在的匹配行的下一行添加“#hello”内容,可需要执行:


  sed'/tr/a\#hello'test2.sh


  一定不要忘记单引号.


  还有一个sedi\的追加命令,命令格式为:sed’指定地址i\追加内容‘目标文件,跟a\不同,i\追加是在指定位置的上一行追加命令


  sed命令中还有一些特殊的匹配,比如元字符匹配,此时需要用转义符"\"屏蔽其特殊意义。


  比如:sed-n‘/\=/p’test2.sh,则打印输出tr一行。


  $在正则表达式中表示尾行,执行sed-n‘$p’test2.sh则打印脚本尾行。


  !表示取反,可以看以下两个例子


  sed中可以使用关键字来匹配行,打印我们所需要的内容,比如,我希望打印test2.sh第2,3行,可以执行:sed-n"2,3P"test2.sh,也可以执行sed-n"/tr/,/exit/p"test2.sh


  sedc\的应用,命令格式为:sed’指定地址c\替换内容‘目标文件。比如,#hello,替换test2.sh脚本的tr这行,可以执行命令:sed'/tr/c\#hello'test2.sh


  sed删除d应用:比如我想删除test2.sh的第2行,可以执行以下命令:sed"2d"test2.sh或者sed/tr/dtest2.sh


  sed替换s应用:格式seds/被替换的字符/替换字符/[替换选项]


  比如,我想把test2.sh中tr替换成大写的tr,则可以执行以下命令:sed‘s/tr/TR/’test2.sh,则把脚本中的tr替换成TR,完后输出全部内容。


  如果仅想打印替换所在行,则需要试用使用-n和-p:sed-n‘s/tr/TR/p’test2.sh:把脚本中的tr替换成TR,然后打印tr所在的行.


  如果脚本中存在好几个tr,并且每一行也存在多个tr,如果执行以上命令的话,只会更改每一行的第一个出现的tr,如果要全部把tr转后为TR,则需要添加G参数:


  sed-n’S/tr/TR/pg’test2.sh。


  w参数是定向输入参数,比如要把上述的变更定向输出到test1.txt中,则需要执行:


  sed-n’s/tr/TR/pgwtest1.txt’test2.sh。


  也可以直接把选定的匹配内容写到另一个文本中,比如想把test2.sh中tr这一样写到test2.txt中,执行:sed-n’/tr/wtest2.txt‘test2.sh


  sed命令学习


  1,++a[$1]是awk中的数组,awk中的数组允许使用字符标示,


  比如读第一行,是a[aaaa](值为1),读第二行(只为2),此时触发条件判断语句,就是你的第二个问题了


  2,awk中语法conditionalexpression1?expression2:expression3


  表示条件成立则返回expression2,否则返回expression3


  这里v?v","$1:$1,v最初为空,第一句时返回aaaa


  以后不为空,例如当a[$1]再次为2时就返回,pppp


  以此下去,最后就是结果了~~

  • 本文来自: 老铁博客,转载请保留出处!欢迎发表您的评论
  • 相关标签:
  • 已有0位网友发表了一针见血的评论,你还等什么?

    必填

    选填

    记住我,下次回复时不用重新输入个人信息

    必填,不填不让过哦,嘻嘻。

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    相关推荐