如何使用unix脚本将多行if语句转换为单行if语句?

如何使用unix脚本将多行if语句转换为单行if语句?

在一个文件中,我有多个 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

相关内容