/ / jak filtrować plik z wyrażeniem regularnym za pomocą polecenia sed? - shell, unix, sed

jak filtrować fil za pomocą wyrażenia regularnego za pomocą polecenia sed? - shell, unix, sed

Czy ktoś może mi powiedzieć, co robią te dwa polecenia?

sed -i "s!{[^{]*;}! !" file.txt

sed -i "s!{[^{]*{! !" file.txt

Znalazłem ten przykład i nie mogę zrozumieć wyniku podanego podczas uruchamiania kodu.

Odpowiedzi:

0 dla odpowiedzi № 1
sed -i "s!{[^{]*;}! !" file.txt
  • sed -i oznacza na miejscu plik.txt może zostać zmieniony.
  • „s! ....! ....! ”zastępuj polecenie, rozdzielaj wykrzyknikami. Najczęściej używasz ukośników, ale sed akceptuje różne znaki, zdefiniowane przez pierwszy po s. Pamiętaj, że wykrzykniki powodują problemy w powłoce. Ponieważ nie ma ukośnika, ani we wzorze, ani w zastępstwie, nie widzę powodu, aby z nich korzystać.
  • {[^ {] *;} wzór do dopasowania
  • W końcu podstawienie jest puste, jeśli zostanie przeniesione z ostrożnością, ale może to być tabulator, funky półprzestrzeni lub coś innego.

Jakie jest skomplikowane wyrażenie:

  • {[^ {] *;} dosłowna para nawiasów klamrowych zawierających ...
  • [^ {] grupa negacji, negacja polega na tym, że najpierw char jest „^”, więc wszystko, co nie jest otwierającym, nawiasami klamrowymi, po którym następuje
  • kwantyfikator *, oznaczający dowolną liczbę, w tym 0, po której następuje
  • backspace, który tak często jak narzędzie maskujące.
  • i średnik.

Więc

  • „{aaaaa;}” powinno pasować
  • „{a;}” powinno pasować
  • "{;}" powinno pasować
  • "{};}" powinno pasować
  • „{{;}” nie powinno się zgadzać
  • „{a}” nie powinno się zgadzać
  • „{a}” nie powinno się zgadzać