.uncrustify.cfg
読みやすくするためにファイルを編集しています。次のように再フォーマットしたいと思います。
2行:
# Add or remove between the parens in the function type: 'void (*x)(...)'
sp_after_tparen_close = ignore # ignore/add/remove/force
1行出力:
sp_after_tparen_close = ignore # ignore/add/remove/force# Add or remove between the parens in the function type: 'void (*x)(...)'
Perlが最良の選択だったようですが、構文に圧倒されました。 10年の余裕があれば学びます ;-)
もっと一般化するには、次のようにします。
2行:
#a comment line
some code
1行出力:
some code # a comment line
==========================
John:手描きの2行:
nl_while_brace = ignore # I,A,R,F # Add or remove newline between 'while' and '{'
nl_scope_brace = ignore # I,A,R,F # Add or remove newline between 'scope (x)' and '{' (D)
...awkを使用せずに2つのペアを組み合わせました。
# Add or remove newline between 'unittest' and '{' (D)
nl_unittest_brace = ignore # I,A,R,F
# Add or remove newline between 'version (x)' and '{' (D)
nl_version_brace = ignore # I,A,R,F
ベストアンサー1
sed '/^#/N;s/\(.*\)\n\([^#].*\)/\2 \1/;P;D'
これは質問の簡単な例を扱います。コメントではなく、少なくとも1つの文字を含む行が続くすべてのコメント行は、その後の行に追加されます。
したがって、例を実行すると、出力は次のようになります。
sp_after_tparen_close = ignore # ignore/add/remove/force # Add or remove between the parens in the function type: 'void (*x)(...)'
@John1024の例を実行すると、出力は次のようになります。
#
# Some comments
#
sp_after_tparen_close = ignore # ignore/add/remove/force # Add or remove between the parens in the function type: 'void (*x)(...)'
some code #a comment line
more code
# comment one
# comment two
still more code # comment three
これらのケースを処理するためにsed
ループは必要ありません。この場合、\n
ewline文字を含めることができる唯一の行は、ハッシュで始まる行です。なぜなら、この行に 1 が追加される#
唯一の行だからです。sed
sed
ハッシュで始まる行に出会ったら、追加の入力行を取得#
してN
パターン空間に追加します。sed
次に、次のs///
ものを交換してみてください。
\(.*\)
- できるだけ多くの引用を使用し、\1
その後に...\n
- 改行文字が続きます...\([^#].*\)
- ハッシュ以外の文字が1つ以上あり、#
パターン空間にすべてが残っています。- そして
\2 \1
。
sed
次に、P
最初に表示される\n
ewline文字までパターンスペースを印刷し、D
同じ文字を削除して残りを再試行します。(そうであれば)。