1. ホーム
  2. macos

[解決済み] '+' (1つまたは複数の出現) が 'sed' コマンドで機能しない

2023-06-21 17:46:46

質問

私は、不要な空白や空行を取り除き、括弧の間にスペースを入れてバランスをとることで、自分のコードを洗練させようとしています。

    int a = 4;
    if ((a==4) ||   (b==5))

    a++   ;

に変更する必要があります。

    int a = 4;
    if ( (a==4) || (b==5) )
    a++ ;

括弧と空行についてはうまくいきます。しかし、複数のスペースを1つのスペースに減らすことを忘れています。

    int a = 4;
    if ( (a==4) ||   (b==5) )
    a++    ;

以下は私のスクリプトです。

    #!/bin/bash
    # Script to refine code
    #
    filename=read.txt

    sed 's/((/( (/g' $filename > new.txt
    mv new.txt $filename

    sed 's/))/) )/g' $filename > new.txt
    mv new.txt $filename

    sed 's/ +/ /g' $filename > new.txt
    mv new.txt $filename

    sed '/^$/d' $filename > new.txt
    mv new.txt $filename

また、このスクリプトをもっと簡潔にする方法、例えばコマンドを削除したり、数を減らしたりする方法はないでしょうか?

どのように解決するのですか?

もし、あなたが GNU sed を使っているならば sed -r を強制します。 sed が拡張正規表現を使用するよう強制します。 + . 参照 man sed :

-r, --regexp-extended

       use extended regular expressions in the script.

を使っている場合も同様です。 OS X sed を使用している場合でも同様ですが、その場合は sed -E :

-E      Interpret regular expressions as extended (modern) regular expressions
        rather than basic regular regular expressions (BRE's).