1

我是 sed、perl 等 unix 编程的新手。我已经搜索过,没有找到与我的情况相符的结果。我需要从同一个文件的顶行附加子字符串。我的文件内容 text.txt :

Name: sur.name.custom
Tel: xxx
Address: yyy
Website: www.site.com/id=
Name: sur.name.custom1
Tel: xxx
Address: yyy
Website: www.site.com/id=

我需要将每个名称(sur.name.*)附加到其块中的每个网站。所以预期的输出:

Name: sur.name.custom
Tel: xxx
Address: yyy
Website: www.site.com/id=sur.name.custom
Name: sur.name.custom1
Tel: xxx
Address: yyy
Website: www.site.com/id=sur.name.custom1

我尝试了以下 sed 命令:

sed -n "/^Website:.*id=$/ s/$/sur.name..*/p" ./text.txt;

但 sed 返回:网站:www.site.com/id=sur.name.* 我输入的字符串相同。我确信 sed 可以从正则表达式模式中追加。如果可能的话,我需要 sed 和 perl。

4

2 回答 2

4

你为什么不为此使用awk?假设名称不包含以下命令应该工作的空格:

awk '$1=="Name:"{name=$2} $1=="Website:"{print $0 name;next} 1' file

Perl 等价物:

perl -pale'
   $F[0] eq "Name:"    and $name = $F[1];
   $F[0] eq "Website:" and $_ .= $name;
' file

(可以删除换行符。)

于 2019-05-17T15:58:13.667 回答
3

这是一个 sed 解决方案:

sed '/^Name:/{h;s/Name: *//;x;};/^Website:/{G;s/\n//;}' filename

翻译:如果该行以 开头Name:,则将名称保存到保留空间;如果该行以 开头Website:,则从保留空间中附加(最新)名称。

于 2019-05-17T23:06:50.377 回答