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
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 ased
' 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
example
(vagytest
) bármelyik karakter után következik, majdcom
. Példaecho 'exampleAcom' | sed '/example.com/d'