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
grepelolvashatja.
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
gfelesleges / é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
gszoká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'