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

使用sed/awk将多行in子句移植到一行?,awk,sed,Awk,Sed,我在多行中有一个code子句,并希望将其移植到一行,例如: 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; my

我在多行中有一个code子句,并希望将其移植到一行,例如:

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++;

你知道怎么做吗?

如果你希望每行有一条语句,并且语句由
分隔
,您可以使用以下技巧:删除所有新行,并用delimiter+换行符替换分隔符

使用awk的一种解决方案

 tr -d '\n' <code | awk -v RS=";" -v ORS=";\n" '1'
tr-d'\n'这可能适合您(GNU-sed):


使用叮当格式或任何其他自动格式工具,没有其他:)我没有叮当。你能帮我做吗?你可以使用
sed
awk
,但是你会从一个更有针对性的工具中得到更好的结果-我推荐GNU
indent
。如果没有该语言的解析器,你无法可靠地操作编程语言的文本。正如@TobySpeight所说的,获得一个美化工具,比如
indent
,或者
cb
或者
uncrustify
,或者谷歌
C美化工具中提到的任何东西。我没有解析器,也没有在我的工作站上安装它的权限,我只想做一个小的操作
sed '/^my/{:a;/;$/!{N;ba};s/\n/ /g}' file