【问题标题】:Sed acting differently in vi than command line on the same serversed 在 vi​​ 中的行为不同于同一服务器上的命令行
【发布时间】:2018-12-25 13:25:25
【问题描述】:

我正在寻找一个文件系统名称(或第一列中的 /),如果有斜杠或那个文件系统(不管哪个)我想通过替换而不用 cr 来加入这两行。

它在 vi 中运行良好。

 :%s:\n\/fs_name:\/fs_name:g

为了清楚起见,使用 : 作为分隔符

每次运行作业时,我都需要能够在脚本中复制它。所以每次都在vi中做不是解决办法

换句话说,我想要: 第一行

/fs second line 

成为

first line /fs second line

在 redhat 7.sed 4.2.46(s) 和 vim 7.4 上使用 bash 4.2.46

【问题讨论】:

  • 如果你在 vim 中使用:%s...,你就没有使用sed。使用sed 是vim 使用!!sed ...:1,$!sed ... 之类的东西完成的

标签: string sed replace redhat


【解决方案1】:

sed 跨换行符有点不重要。我希望我正确理解了你的意图(见下文),在这种情况下你正在寻找这样的东西:

sed -e 'N;s#\n/#/#' input.txt

它不断将行附加到模式空间。然后只需将<newline> 的所有实例替换为/ 后跟/。您可以通过使用 sed-i 参数来执行此操作。


我在浏览问题时遇到了一些困难,因为它目前的格式是,但我的理解是你在这之后。对于每个:

part1
/something else

你想得到:

part1/something else

正如William Pursell 在对您问题的评论中指出的那样。在 vi 中使用 s 与调用 sed 不同,尽管它们在历史上是相关的并且可以追溯到 edvi 的命令模式就像使用 ex 编辑你的文件。顺便说一句。是您可以在脚本中执行的操作,因为您可以通过命令行为其提供命令。例如。 echo -e '%s#t#X#g\nwq' | ex input.txt 与在 vi 中打开 input.txt 后执行 :%s#t#X#g:wq 相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 2014-07-20
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多