egy adott szöveget tartalmazó sorok eltávolítása egy fájlból

Van egy fájl, amelyben szerepel az e-mailek listája, és minden sorban van egy e-mail. Szeretném eltávolítani azokat a sorokat, amelyek tartalmazzák a example.com vagy test.com karakterláncot.

Próbáltam:

sed -i "s/example\.com//ig" file.txt 

De csak a example.com sztringet távolítja el, hogyan lehet eltávolítani a teljes sort?

Válasz

GNU sed használatával:

sed "/example\.com/d;/test\.com/d" -i file.txt 

eltávolítja a example.com és test.com.

Feladó: man sed:

d Delete pattern space. Start next cycle. 

Megjegyzések

  • Ezzel törli a (z) example (vagy test) bármelyik karakter után következik, majd com. Példa echo 'exampleAcom' | sed '/example.com/d'
  • Gah, buta vagyok, szórakozás nélkül, nem kerülöm el a pontot. Köszönjük, hogy észrevetted!

Válasz

POSIXly, használhatod a grep:

grep -Eiv "(example|test)\.com" <in >out 

megjegyzések

  • Vigyázzon, hogy ne ugyanazt a fájlt használja be- és kimenetként , különben megcsonkítják, mielőtt grep elolvashatja.

Válasz

A regex csak a example.com és sed kifejezéseket illeszti csak az example.com s helyére. húr. A regexének meg kell egyeznie az example.com vagy a test.com bármelyikével.

sed -i "s@.*\(test\|example\)\.com.*@@i" file.txt 

Megjegyzések

  • A válasz nem törli az egyező sorokat; csak üresé teszi őket. – Ezenkívül nem kezeli a kis- és nagybetűket nem érzékeny szöveget (az OP ' példa szerint). -. A g felesleges / értelmetlen, mert a sed ‍ ' regex mohó, ezért a vezető és a záró .* hatására a szöveges egyezés első előfordulása megegyezik a teljes sorral. ‍
  • Köszönöm a visszajelzéseket. Nem figyeltem ' az esetérzékenységre. A g szokásom, igazad van, nem feltétlenül szükséges. Azt is gondoltam, hogy az OP vágyakozott volna a sor kitakarítására. Most minden világos. Köszönet

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük