在一个文件中,我有多个 if 条件,如下所示:
if ( a==b ||
c!=d &&
(e>f))
{
do something
}
我必须将每个多行 if 语句转换为单行 if 语句,即
if ( a==b || c!=d && (e>f))
{
do something
}
如何使用 Unix 脚本进行此转换?
答案1
通过缩进工具(例如indent
或 )运行它clang-format
。它们了解 C 和 C++ 语法规则,并将根据您的配置方式重新格式化您的代码。clang-format
甚至使用与clang
编译器相同的语言解析器。
例如:
$ cat test.c
if ( a==b ||
c!=d &&
(e>f))
{
/* do something */
}
$ clang-format test.c
if (a == b || c != d && (e > f)) {
/* do something */
}
$ clang-format --style="{BreakBeforeBraces: Allman}" test.c
if (a == b || c != d && (e > f))
{
/* do something */
}
$ indent -kr -st <test.c
if (a == b || c != d && (e > f)) {
/* do something */
}
$ indent -kr -bl -st < test.c
if (a == b || c != d && (e > f))
{
/* do something */
}
indent
上面的示例中使用的是 GNU ,而不是BSD 系统上的indent
默认值。indent
答案2
可以用以下方法完成awk
:
awk '(/^\{/ || flag)&&/^[^}]/{printf "\n%s",$0;flag=1}
/^\}/{flag=0; printf "\n}\n" ;next}
(!flag){printf "%s ",$0}' infile.txt