1

# で始まるすべての行を次の行の最後に移動する必要があります ( AWK/SED ? )。

テストファイル.txt :

# FIRST COMMENT
alias1: john@domain.com, tom@domain.com
alias2: betty@domain.com
# SECOND COMMENT
alias3: anna@domain.com, mark@domain.com
alias4: dan@domain.com

期待される出力:

alias1: john@domain.com, tom@domain.com # FIRST COMMENT
alias2: betty@domain.com
alias3: anna@domain.com, mark@domain.com # SECOND COMMENT
alias4: dan@domain.com

私はこれをそのように行うことができました(しかし、それは最善の解決策ではないと確信しています):

sed '/^#/ N;s/\n/$/' testfile.txt | sed -e の/\(.*\)$\(.*\)/\2\1/

  1. 最初の SED マージ行と次の$区切り行。
  2. $2 番目の SED は、文字間ですべてを切り替えます

より良い方法(パフォーマンスと見た目)にするためのアドバイスはありますか?

ありがとう

4

2 に答える 2

4

# で始まるすべての行を次の行の最後に移動する必要があります

この行を試してください:

awk '/^#/{x=$0;next}{if(x)print $0,x;else print;x=0}' file

また

awk '/^#/{x=$0;next}{print $0 (x? FS x:"");x=0}' file

あなたの例でテストしてください:

kent$  echo "# FIRST COMMENT
alias1: john@domain.com, tom@domain.com
alias2: betty@domain.com
# SECOND COMMENT
alias3: anna@domain.com, mark@domain.com
alias4: dan@domain.com"|awk '/^#/{x=$0;next}{if(x)print $0,x;else print;x=0}'             
alias1: john@domain.com, tom@domain.com # FIRST COMMENT
alias2: betty@domain.com
alias3: anna@domain.com, mark@domain.com # SECOND COMMENT
alias4: dan@domain.com
于 2013-10-15T09:19:59.247 に答える
1

これはうまくいくかもしれません(GNU sed):

sed -r '/^#/{$!N;s/(.*)\n(.*)/\2 \1/}'  file

行がハッシュで始まる場合は、改行と次の行を追加し (現在の行がファイルの最後の行でない限り)、その行を現在の行と入れ替えて、それらの間にスペースを入れます。

于 2013-10-15T11:05:31.147 に答える