SED命令行实用程序(适用于Windows):如何在指定行之后添加新文本行

时间:2015-03-03 16:23:28

标签: shell sed scripting ini

请给我一些建议。我需要 sed.exe 命令行实用程序(SED版本 for Windows ,版本4.1.5.4013)的工作解决方案。或者只是给我一个有效的UNIX解决方案,我会尝试为我的sed(适用于Win OS)进行调整。

如何在文本文件中的指定行之后添加新的(非常复杂,说实话)文本行?

我的输入文件包含以下文字(两行):

[Pagebar Item Popup Menu]
Feature !Private, Item, MI_IDM_MENU_PAGEBAR_NEW_PAGE    = New Page, 1,,,"New item menu"

我需要在第一行和第二行之间插入以下行(上面提到):

Item, "Load tab" = Enable Javascript,,,,"Remove from Start Page.rtl" & Enable   plugins & Enable display images & Reload

是否可以替换(但不是每当sed命令运行时添加新行!)现有的第一行有两行(替换行+新添加的字符串)。或者,举例来说,检查" 项目,"加载标签" ..... " line已存在,避免插入新行的不需要的重复项?

我尝试了但是它没有工作:

sed -i "s/"\[Pagebar Item Popup Menu\]"/"\[Pagebar Item Popup Menu\]"\n"^Item,"Load tab"=Enable Javascript,,,,"Remove from Start Page\.rtl" & Enable plugins & Enable display images & Reload[ 0-9]\{1,\}[.,][0-9]\{3\}$/g" standard_menu.ini

2 个答案:

答案 0 :(得分:1)

sed -e "/pattern/ {p;s/.*/line_to_insert/;}" input_file > output_file

当模式匹配时,sed将执行以下操作:

  1. p:打印模式空间:在这种情况下,这是匹配行
  2. s /.*/ line_to_insert /:将模式空间更改为line_to_insert
  3. 如果在没有-n的情况下调用sed,则会写出模式空间

    如果使用-n调用sed,那么另外一个p;将需要命令:

    sed -e "/pattern/ {p;s/.*/line_to_insert/;p;}" input_file > output_file
    

答案 1 :(得分:0)

对于windows下的unix解决方案,你考虑过cygwin吗?

https://www.cygwin.com/

其次,你的sed命令看起来有点时髦 - 你是否试过通过使用一组不同的引号围绕表达式来简化它?

最后,我想你可能想要cygwin,因为我不相信sed会做你想做的事。

How to insert a line in a file between two blocks of known lines (if not already inserted previously), using bash?

此示例也使用grep

谢谢,

// P