AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 994676
Accepted
Smile
Smile
Asked: 2018-01-12 02:21:23 +0800 CST2018-01-12 02:21:23 +0800 CST 2018-01-12 02:21:23 +0800 CST

使用 sed 替换文件中的第一个匹配项 - 为什么会打印后续行?

  • 772
$ cat rgb
lower (#1): "red green blue"
UPPER (#2): "RED GREEN BLUE"

$ sed '/#/ {s//=/; :k n; bk}' rgb
lower (=1): "red green blue"
UPPER (#2): "RED GREEN BLUE"

我知道sed如果没有任何下一行要附加,则在没有自动打印的情况下退出。但是在这个例子中sed打印了最后一行。它是如何工作的?

command-line
  • 1 1 个回答
  • 522 Views

1 个回答

  • Voted
  1. Best Answer
    Zanna
    2018-01-12T02:51:05+08:002018-01-12T02:51:05+08:00
    'n'
         (next) If auto-print is not disabled, print the pattern space,
         then, regardless, replace the pattern space with the next line of
         input.  If there is no more input then 'sed' exits without
         processing any more commands.
    

    该-n选项禁用自动打印。

    您将第一行中的#替换为(模式空间)。然后由于没有选项,图案空间被打印出来。然后模式空间被下一行替换,然后我们循环到,这导致模式空间被打印,因为自动打印没有被禁用,然后没有更多的输入行退出。=#n-nnsed

    如果您使用-n并将 a 添加p到循环中,可能会更清楚:

    $ sed -n '/#/ {s//=/; :k n;p; bk}' rgb
    UPPER (#2): "RED GREEN BLUE"
    

    之后n,p强制打印除第一行之外的所有内容。

    $ sed -n '/#/ {s//=/; :k p;n; bk}' rgb
    lower (=1): "red green blue"
    UPPER (#2): "RED GREEN BLUE"
    

    before n,p每次都强制打印图案空间。n从不打印任何东西,因为自动打印被禁用。

    尝试使用循环中不同位置-n的命令删除选项。p

    如果您只想在更改后打印一行,您可以使用q:

    $ sed '/#/ s//=/;q' rgb
    lower (=1): "red green blue"
    
    • 2

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve