全球主机交流论坛

标题: 如何实现跨行操作(sed awk grep ...)?搞定,谢谢tinyfish [打印本页]

作者: llyang    时间: 2020-4-1 13:12
标题: 如何实现跨行操作(sed awk grep ...)?搞定,谢谢tinyfish
本帖最后由 llyang 于 2020-4-1 13:57 编辑

文件 myserver.conf 内容如下:

  1. server {
  2.     listen 80;
  3.     listen [::]:80;
  4. }
  5. server {
  6.     listen 443 ssl http2;
  7. }
  8. server {
  9.     listen 1080;
  10.     listen [::]:1080;
  11. }
复制代码


cat myserver.conf | sed -n '/^server/,/^}/p'
这样就成了全选择

我想单独选择每个段落
只选包含80区域(line 1-4),只选443区域(line 5-7),只选1080区域(line 8-11) -- server { ... }


百度下、谷歌下的“高手”,请你绕行,谢谢


作者: 一个不知名网友    时间: 2020-4-1 13:17
提示: 作者被禁止或删除 内容自动屏蔽
作者: 这是最好的年代    时间: 2020-4-1 13:20
vim可以做到单独选择段落用正则处理,具体怎么操作忘了
作者: llyang    时间: 2020-4-1 13:24
这是最好的年代 发表于 2020-4-1 13:20
vim可以做到单独选择段落用正则处理,具体怎么操作忘了

vim没研究过,即使行也没用,无法实现自动化

跨行容易,特征字符也容易
跨行+中间特征字符,我就不会了
作者: tinyfish    时间: 2020-4-1 13:31
本帖最后由 tinyfish 于 2020-4-1 13:37 编辑

只会 awk 的……
cat myserver.conf | awk '$0~str{sub(".","server&");print}' RS='server' ORS='' str="443"



PS:是gawk……
作者: llyang    时间: 2020-4-1 13:33
本帖最后由 llyang 于 2020-4-1 13:56 编辑
tinyfish 发表于 2020-4-1 13:31
只会 awk 的……


awk grep都行哈,能到达效果就好。

那我修改下题目吧

有点效果,但是没有显示全部段落, 到443所在行就没了

  1. cat myserver.conf | awk '$0~str{sub(".","server&");print}' RS='server' ORS='' str="443"
复制代码


搞定,谢谢你




欢迎光临 全球主机交流论坛 (https://loc.528866.xyz/) Powered by Discuz! X3.4