파일에는 다음과 같은 조건이 여러 개 있습니다.
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
indent
위의 예에서는 BSD 시스템의 기본값 대신 GNU를 사용합니다 .indent
답변2
이는 다음을 사용하여 수행할 수 있습니다 awk
.
awk '(/^\{/ || flag)&&/^[^}]/{printf "\n%s",$0;flag=1}
/^\}/{flag=0; printf "\n}\n" ;next}
(!flag){printf "%s ",$0}' infile.txt