sedを使用してテキストファイルの一部と次の行を削除します。

sedを使用してテキストファイルの一部と次の行を削除します。

次のようにファイルを編集する必要があります。

auto wlx00
allow-hotplug wlx00
iface wlx000 inet dhcp
iface wlx000 inet6 auto
  post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2
auto wlx000

目標は、「iface ... inet6」で始まる行を削除し、スペースで始まる次の数行を削除することです(なし以上の可能性があります)。

iface wlx000 inet6 auto
  post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2

次の結果を得るには、残りを変更せずに残してください。

auto wlx00
allow-hotplug wlx00
iface wlx000 inet dhcp
auto wlx000

私は次のようにsedを試しました。

sed -i.old -r -e "/iface\s*\w*\s*inet6.*/,\${d;/^\s.*/d;}" /etc/configfile

しかし、正しい位置から始まり、最後まで消去されたすべてを削除します。 ifaceテキストを選択した後、スペースで始まる行だけを削除したいと思います。

答え1

モノライナーを次のように調整してみてくださいsed

sed  '/iface\s*\w*\s*inet6.*/,/^[^ ]/ {/^[^ i]/!d}' file

最初のパターンから空白文字で始まらない最初の行までの範囲を一致させ、空白またはiface「i」(先行)で始まる行を削除します.i今後のブロックが必要かどうか再検討が必要です。

次のように動作するようです。

sed -n '/iface\s*\w*\s*inet6.*/ {:L; n; /^[ ]/bL;}; p' file

試してみてもう一度報告してください。

答え2

標準スクリプトはsed明示的なループを使用して行を削除します。

/^iface .* inet6/ {
    :again
    N
    s/.*\n//
    /^[[:blank:]]/b again
}

スクリプトはこれらのinet6行を見つけ、パターンスペース内のその行に次の行を追加します(間に新しい行が含まれています)。次に、最初の改行文字を含めてパターンスペースを削除します(これにより元のinet6行が削除されます)。パターンスペースが空白文字(スペースまたはタブ)で始まらないまでこれを続けます。

テスト:

$ cat file
auto wlx00
allow-hotplug wlx00
iface wlx000 inet dhcp
iface wlx000 inet6 auto
  post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2
auto wlx000
$ sed -f script.sed <file
auto wlx00
allow-hotplug wlx00
iface wlx000 inet dhcp
auto wlx000

手動データテスト:

$ cat file
something1
something2
iface have a inet6 here
   delete me
   me too
   same here
something3
something4
iface more something inet6
   be gone
   skip this
something5
$ sed -f script.sed <file
something1
something2
something3
something4
something5

スクリプトは「1行」です。

sed -e '/^iface .* inet6/ {' -e ':a' -e 'N;s/.*\n//;/^[[:blank:]]/ba' -e '}'

答え3

私はすでにツールに良い答えを得ていますsedが、以下を使用してより簡単だと思われる他のものを提案しますpcregrep

pcregrep -Mv '^iface.*inet6(.|\n )*' file

正規表現は説明を必要としません。その行から始まるパターンを検索し、^iface.*inet6文字グループまたはゼロ回以上繰り返される単一のスペースが続く新しい行を検索します。次に、オプションを使用して複数の線形一致がpcregrep許可されていることを示し、全体を反転します(一致した部分は削除されます)。-M-v

関連情報