2015-11-28 12 views
5

Próbuję usunąć kilka linii w pliku, jeśli pasują one do określonego wzorca, który jest zmienny.Jednoliterówka Perla: usuwanie wiersza z dopasowaniem do wzorca

Próbuję usunąć linię, która pasuje z abc12, abc13 itd

próbowałem pisać skrypt C-shell, a to jest kod:

**!/bin/csh 
    foreach $x (12 13 14 15 16 17) 
    perl -ni -e 'print unless /abc$x/' filename 
    end** 

To nie robi działa, ale kiedy używam jednolinijki bez zmiennej (abc12), działa.

Nie jestem pewien, czy coś jest nie tak z dopasowaniem wzoru, czy też jest coś, czego mi brakuje.

+0

'perl -ne '/ -i [234567] abc1/lub drukowania' filename' –

Odpowiedz

8

Tak, to fakt, że używasz pojedynczych cudzysłowów. Oznacza to, że $x jest interpretowane dosłownie.

Oczywiście, jesteś również robi to bardzo nieefektywnie, ponieważ przetwarzasz każdy plik wiele razy.

Jeśli szukasz, aby usunąć linie abc12 do abc17 Można to zrobić wszystko za jednym zamachem:

perl -n -i.bak -e 'print unless m/abc1[234567]/' filename 
+0

dzięki to działa . – shiva1987

+0

Idealnie, jeśli masz odpowiedź spełniającą Twoje potrzeby, powinieneś ją zaakceptować. (ten mały haczyk z boku) – Sobrique

+0

Przepraszam, nie wiedziałem o tym, jestem tu nowy, dzięki za napiwek. – shiva1987