/ / як відфільтрувати філ з регулярним виразом за допомогою команди sed? - оболонка, unix, sed

як фільтрувати fil з регулярним виразом за допомогою команди sed? - оболонка, unix, sed

Хто-небудь, будь ласка, скажіть мені, що роблять ці дві команди?

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

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

Я знайшов цей приклад, і я не можу з’ясувати результат, наданий під час запуску коду.

Відповіді:

0 для відповіді № 1
sed -i "s!{[^{]*;}! !" file.txt
  • sed -i означає на місці, file.txt може бути змінено.
  • "s! ....! ....команда "Замінити", розділити на знак оклику. Найчастіше ви побачите використовувані косої риси, але sed приймає різні символи, визначені першим, слідом за s. Зауважте, що знаки оклику створюють проблеми в оболонці. Оскільки косої риски немає, ні в шаблоні, ні в заміні, я не бачу причин використовувати їх.
  • {[^ {] *;} шаблон, який відповідає
  • "" заміна, врешті-решт, порожня, якщо вона буде перенесена обережно, але це може бути вкладка або фанки напівпробілів або щось інше теж.

Тепер, який складний вираз:

  • {[^ {] *;} буквальна пара фігурних дужок, що містять ...
  • [^ {] група заперечення, заперечення спочатку символом є "^", тому все, що не є відкриттям, фігурною дужкою, а потім
  • кількісний показник *, що означає будь-яке число, включаючи 0, за яким слід
  • backspace, який, як і часто, є інструментом маскування.
  • і крапка з комою.

Так

  • "{aaaaa;}" має відповідати
  • "{a;}" має відповідати
  • "{;}" має збігатися
  • "{};}" має відповідати
  • "{{;}" не повинен збігатися
  • "{a}" не повинен збігатися
  • "{a}" не повинен збігатися