1

ファイルの一部は次のようになります。

${goto 97}${exec sed -n '1p' $HOME/.config/conky/itl/raw2}#
${goto 194}${exec sed -n '2p' $HOME/.config/conky/itl/raw2}#
${goto 291}${exec sed -n '3p' $HOME/.config/conky/itl/raw2}#
${goto 388}${exec sed -n '4p' $HOME/.config/conky/itl/raw2}#
${goto 485}${exec sed -n '5p' $HOME/.config/conky/itl/raw2}#
${goto 582}${exec sed -n '6p' $HOME/.config/conky/itl/raw2}#
${goto 679}${exec sed -n '7p' $HOME/.config/conky/itl/raw2}#
${goto 776}${exec sed -n '8p' $HOME/.config/conky/itl/raw2}#
${goto 873}${exec sed -n '9p' $HOME/.config/conky/itl/raw2}#

そして、「${goto nn}」を 1 行上に移動し、最初の行を破棄します (または、オプションで、最初の行を最後の位置に移動します)

編集: goto 後の数値は、このようにファイル全体で数回繰り返されます。説明されている方法でそれらをすべて変更したい。また、構成ファイルには前後に他のものが含まれています。

私はsedに慣れてきたばかりなので、sedで解決したいと思いますが、Linuxシェルスクリプトに入ることができる限り、必須ではありません。

edit2: 構成ファイルに sed コマンドも含まれていることに混乱しないことを願っています。それは私が探しているソリューションとは何の関係もありません。

4

1 に答える 1

1

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

sed '$!N;s/^\(${goto [0-9]\+}\)\(.*\n\)\(${goto [0-9]\+}\)/\3\2\1/;P;D' file
  • $!N最後の行を除くすべての行に対して、改行と次の行をパターンスペースに追加します
  • s/^\(${goto [0-9]\+}\)\(.*\n\)\(${goto [0-9]\+}\)/\3\2\1/${goto [0-9]\+}whereは 1 つ以上の数字を意味するという式で始まる 2 つの連続する行について[0-9]\+、これらの文字列とその間の文字列を書き留めて、それらを入れ替えます。
  • P;D最初の改行まで印刷してから、改行\nまで削除します。パターン スペースが空でない場合、次の行を自動的に読み取らず、最初のコマンドから始まる新しいサイクルを開始します (その後、改行が追加されます...)。
于 2012-11-24T11:26:33.793 に答える