使用文件中的第一个单词作为所有行的前缀

使用文件中的第一个单词作为所有行的前缀

我想使用文件中的第一个单词作为文件所有行(第一行除外)的前缀。

输入:

x.o: x.cpp /u/a.h 
/b.h \
/c.h \

输出:

x.o: x.cpp /u/a.h \
x.o: /b.h \
x.o: /c.h \

有人能帮我使用 sed 解决上述问题吗?

答案1

你可以用 GNU sed 这样做:

sed -r '1 {h; s/ .*//; x}; 1!{G; s/([^\n]*)\n(.*)/\2 \1/}' infile

或者作为单独的脚本:

解析器

1 {                         # run block for first line only
  h                         # save copy of line in hold space
  s/ .*//                   # remove redundant part
  x                         # swap prefix to hold space
}

1! {                        # when not first line
  G                         # append prefix to pattern space
  s/([^\n]*)\n(.*)/\2 \1/   # reorganize so prefix is the prefix
}

像这样运行:

 sed -rf parse.sed infile

输出:

x.o: x.cpp /u/a.h 
x.o: /b.h \
x.o: /c.h \

答案2

Perl 解决方案:

perl -pe 'print $prefix; ($prefix) = /^(.+? )/ if 1..1' INPUT.TXT

相关内容