パターン行とコンマで区切られ、()で囲まれた空でない連続行を連結します。

パターン行とコンマで区切られ、()で囲まれた空でない連続行を連結します。

次のファイルがあります。

click
css_add_violation_false

click
css_add_claim_false

そして

select
css_driver1_birth_date_month
birth_date_month

select
css_driver1_birth_date_day
birth_date_day

click[newline]値をclick(値)に置き換える方法は?
または、[改行]値[改行]値をクリックしてから(値、値)をクリックします。

sed複数行の内容に合わないので理解できません。

私は次のようにしてtrキャリッジリターンを削除しようとしました。

tr 'select\n' 'select('

しかし、これはすべてのキャリッジリターンを削除し、多くを追加します。(

(注:OSX)

希望の出力:

click(css_add_violation_false)
click(css_add_claim_false)

そして

select(css_driver1_birth_date_month, birth_date_month)
select(css_driver1_birth_date_day, birth_date_day

空行が表示されるまで複数の引数を処理できる場合は、これがより一般的な答えになります。

答え1

そしてawk

awk '{if($0=="click"){getline n;printf "%s(%s)\n", $0, n}else{print}}' file

行が一致すると、click次の行が名前付き変数にロードされ、n目的の出力形式が印刷されます。

編集する:

可変数の行があり、空行が発生するまでそれらを結合するには、次のコマンドを使用します。

awk '{if($0=="click"){getline n; printf "%s(%s", $0, n;
  while($0!=""){printf ",%s", $0; getline};
  printf ")\n\n", x}else{print}}' file

空の行が見つかるまでカンマで区切られた行を印刷します。

答え2

perl仕事のための素晴らしいツールです。

$ perl -p00e 's/click\n(.*)\n/click(\1)\n/' file
click(css_add_violation_false)

click(css_add_claim_false)

答え3

~のためGNU sed

sed -Ez 's/(click)\n([^\n]*)/\1(\2)/g'

または古いスタイル

sed '/click/{N;s/\n/(/;s/$/)/;}'

関連情報