sed: 前のタブをそのまま保持しながら、文字列間の余分な空白を単一のスペースとして削除します。

sed: 前のタブをそのまま保持しながら、文字列間の余分な空白を単一のスペースとして削除します。

私はコードを持っています:

1 /**             
2 a        b         c
3 **/
4 int main() {
5     int x;
6     if ( condition) {
7     return       x;
8     }
9 }

行7と同様に、トークンまたは文字列の間の複数のスペースを単一のスペースに変更する必要がありますが、コメント(行2)またはコードの前のタブは影響を受けてはいけません。したがって、出力は次のようになります。

1 /**             
2 a        b         c
3 **/
4 int main() {
5     int x;
6     if ( condition) {
7     return x;
8     }
9 }

'tr'を試しましたが、~$ tr -s " " < file2行が変更され、5行から8行から先行タブ文字が削除されました。を使用して実行できますかsed

ベストアンサー1

どのくらい行くのでしょうか?

sed -rn '\#/\*\*#,\#\*\/*# {p;b}; s/([^ ]) +/\1 /g; p' file

わかりますか?変更されていないコメント行を印刷し(ただし、同じ行のコメントのオン/オフを処理できない)、スクリプトの残りの部分をスキップします。コメントアウトされていない行の場合は、空白以外の文字に続く複数の空白(したがって範囲外の行のインデント)を単一の空白に圧縮します。

おすすめ記事