我想使用文件中的第一个单词作为文件所有行(第一行除外)的前缀。
输入:
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