使用sed / awk将多行in子句移植到一行?

时间:2015-08-18 10:06:15

标签: awk sed

我有一个多行的代码子句,并希望将它移植到一行,例如:

int j =7;
int k =17;
int p =17;
myFunc(j,
k,
p);
j++;

将其移至

int j =7;
int k =17;
int p =17;
myFunc(j, k, p);
j++;

我有一个接近我需要的表达式,但结果是

 sed -e '/my/,/;\a/{:a; N; s/\n/ /g; ta}' my file 

int j =7;
int k =17;
int p =17;
myFunc(j, k, p); j++;

任何想法怎么做?

2 个答案:

答案 0 :(得分:1)

如果你想要每行一个语句并且语句由;分隔,你可以使用这个技巧:删除所有新行并用分隔符+换行符替换分隔符。

使用awk的一个解决方案

 tr -d '\n' <code | awk -v RS=";" -v ORS=";\n" '1'

显然,如果您有多行声明,这将无法奏效。

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed '/^my/{:a;/;$/!{N;ba};s/\n/ /g}' file