0

trコマンドまたは同様のコマンドを使用して、このブロックに対して特定のテキスト操作を実行しようとしています:

if (/*condition*/)
{
    statement1;
}
int a=3;
if (a)
{
    statement1;
    statement2;
}
else
{
    statement1;
    statement2;
    statement3;
    statement4;
    ///may be more lines
}

単一行コマンドを削除して、これを取得したい:

if (/*condition*/)
    statement1;
int a=3;
if (a)
{
    statement1;
    statement2;
}
else
{
    statement1;
    statement2;
    statement3;
    statement4;
    ///may be more lines
}

私は試しましtr -s '{}' ' ' <file.txtたが、特定の単一行形式ではなく、すべての中かっこを圧迫します。

ありがとう

4

1 に答える 1

0

レコードセパレーターを{またはに設定して、}フィールドの数を確認できます。複数ある場合は、括弧で囲みます:

$ awk -v RS=[{}] 'NF>1{$0="{"$0"}"}1' file
if(true)


statement;


if(false)

{
statement1;
statement2;
}
于 2015-06-26T10:27:35.777 に答える