sed或perl模式匹配,然后执行多个操作

sed或perl模式匹配,然后执行多个操作,sed,match,Sed,Match,我想在一行末尾搜索一个变量数值,一旦找到,请执行两项操作: 在该行末尾追加一些内容(例如,html标记) 向下移动该数值的行数,并在其中附加一行(例如,关闭前面的html标记) 有快速指示吗?附件是我的样本数据和所需更改的屏幕截图。请注意,在某些情况下,如果没有成员,则行尾不会有任何数值。 您的数据结构良好。完全可以使用sed 您需要识别标头,然后对其进行操作 输入 命令 sed-r'/^\S/{S$@;1!S^\n}$s@$@'输入 输出 标题1 项目1.1 项目1.2 项目1.3 标题

我想在一行末尾搜索一个变量数值,一旦找到,请执行两项操作:

  • 在该行末尾追加一些内容(例如,html标记)
  • 向下移动该数值的行数,并在其中附加一行(例如,关闭前面的html标记)
有快速指示吗?附件是我的样本数据和所需更改的屏幕截图。请注意,在某些情况下,如果没有成员,则行尾不会有任何数值。
您的数据结构良好。完全可以使用
sed

您需要识别标头,然后对其进行操作

输入 命令
sed-r'/^\S/{S$@;1!S^\n}$s@$@'输入
输出
标题1
项目1.1
项目1.2
项目1.3
标题2
项目2.1
项目2.2
项目2.3
标题3
项目3.1
项目3.2
项目3.3

好的,我想我现在就用这一行来解决问题(参见问题中的示例数据):


sed
不是此作业的工具。您可能可以使用
awk
,但我本人倾向于使用
perl
。“下移的行数与该数值的行数相同”是
sed
的一个问题。我不能肯定
sed
不能做到这一点,但如果可以的话,完成它的程序就不漂亮了output@glennjackman,将发布一个示例数据,但我想我需要弄清楚如何将其正确格式化…在编辑您的问题时,单击文本区域右上角的问号图标a:这是标记编辑help@JohnBollinger. 谢谢是的,如果sed不是正确的工具,我可以使用perl。。。
header 1
    item 1.1
    item 1.2
    item 1.3
header 2
    item 2.1
    item 2.2
    item 2.3
header 3
    item 3.1
    item 3.2
    item 3.3
sed -r '/^\S/{s@$@<wrap>@; 1!s@^@</wrap>\n@}; $s@$@</wrap>@' input
header 1<wrap>
    item 1.1
    item 1.2
    item 1.3
</wrap>
header 2<wrap>
    item 2.1
    item 2.2
    item 2.3
</wrap>
header 3<wrap>
    item 3.1
    item 3.2
    item 3.3
</wrap>
perl -pe '/\((\d+) members?\)/ && do {$close = $.+$1; s/$/OPEN_TAG/;}; $.==$close && do {s/$/CLOSE_TAG/};' input-file