用图案打印连续的线



我正在尝试提取以#开头的第一组行。我只是想动态地获得第一个模式

示例:输入

# script:
something 
## Select the operation **  -
# mkfolders)    create      -
# copy)     copy Overlay  -
# bkp)      BKP of overlay  -
something
# commentary
# commentary
something

输出

## Select the operation **
# mkfolders)    create          -
# copy)         copy Overlay    -
# bkp)          BKP of overlay  -

我正在使用以下sed命令

sed -n 5,8p文件

问题是,如果文件有任何更改,则需要更改命令。欢迎仅针对第一组私密线的动态解决方案:

任何解决方案?

预先感谢。

使用awk的段落模式

$ awk -v RS= '/^#/{print; exit}' ip.txt
# script:
$ awk -v RS= '/^##/{print; exit}' ip.txt
## Select the operation **  -
# mkfolders)    create      -
# copy)     copy Overlay  -
# bkp)      BKP of overlay  -
  • -v RS=当RS设置为空字符串时,将一条或多个连续的空线用作输入记录分隔仪
  • /^##/输入记录以##开头
    • print; exit打印输入记录,然后退出,因为只需要第一个记录


问题在某种程度上不清楚,下面的代码将打印第一个连续行中具有#字符的第一个记录

$ awk -v RS= '/#[^n]+n#/{print; exit}' ip.txt
## Select the operation **  -
# mkfolders)    create      -
# copy)     copy Overlay  -
# bkp)      BKP of overlay  -

这可能对您有用(gnu sed(:

sed -rn '/^s*#/!b;:a;N;/^s[^#]/M!ba;/^(s*#.*n#[^n]*).*/!b;s//1/p;q' file

忘记不以#开头的线。在模式空间中收集后续行,直到不以#或文件结束条件开头的线为止。如果该系列小于两行,请忘记它们并重复。否则,请删除最后一行,如果不以#开头,请打印收集并退出。

最新更新