![Unix 스크립트를 사용하여 여러 줄의 if 문을 한 줄의 if 문으로 변환하는 방법은 무엇입니까? [폐쇄]](https://linux55.com/image/116536/Unix%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%97%AC%EB%9F%AC%20%EC%A4%84%EC%9D%98%20if%20%EB%AC%B8%EC%9D%84%20%ED%95%9C%20%EC%A4%84%EC%9D%98%20if%20%EB%AC%B8%EC%9C%BC%EB%A1%9C%20%EB%B3%80%ED%99%98%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
파일에는 다음과 같은 조건이 여러 개 있습니다.
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