sed - 一致しない「}」、「)」、または「]」を削除する(問題のある行でのみ動作)

sed - 一致しない「}」、「)」、または「]」を削除する(問題のある行でのみ動作)

行が多いファイルがあります。

一部の行は一致しない中括弧で終わります(例: " }")。

これは、以下を含む行でのみ機能します。".to"

sedを使用して文字列( "")を含むが、行のどの位置(前または後ろ)に他の文字列( "")がなく、 " "で終わるすべての行から一致しない中括弧を.to削除するにはどうすればよいですか?{.to}

それはまるでsed -i '/\.to/s/[[:space:]]*\}//' file

ただし、これは文字列( " .to")を含み、}" "で終わるすべての行に適用されます。

{次のように中かっこ/角かっこなしで行で機能したいと思います。}

このために、複数行中括弧を心配する必要はありません。クエリに一致する行(この場合は「.to」)を制限すると、これを防ぐのに役立ちます。

例えば

  expect(:size).to eq 2 }
  expect(:first).to be_persisted }
  expect("first.number_field").to eq 10 }
  expect(:last).to be_persisted }
  expect("last.number_field").to eq 10 }
  this remains unchanged }
  this {remains} unchanged }
  this {
     is ok }

=>

  expect(:size).to eq 2
  expect(:first).to be_persisted
  expect("first.number_field").to eq 10
  expect(:last).to be_persisted
  expect("last.number_field").to eq 10
  this remains unchanged }
  this {remains} unchanged }
  this {
     is ok }

ベストアンサー1

そしてそして高度な正規表現を見る:

perl -lpe 's/((?<!\{).*?\.to.*)}\s*$/$1/' file

そして:

awk '!/{/ && /\.to.*}/{sub(/\}/, "", $NF)}1' file

おすすめ記事