次のファイルがあります。
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/$/)/;}'