Вы можете подойти к этому пбм. следующим образом:
$ perl -ne 'tr|/|/| == 3 || print' inp
Здесь мы полагаемся на свойство функции Perl tr
возвращать количество переводов, которые она сделала для входной строки, в данном случае текущей записи. Поэтому, когда во входной записи ровно три косых черты, мы не печатаем эту запись, но во всех остальных случаях печатаем.
Другим методом, на этот раз использующим POSIX sed
, может быть:
$ sed -e 's:/:/:4;t' -e 's//\n/3' -e '/\n/d' inp
Здесь мы сначала проверяем, есть ли более 3 косых черт, и если да, мы переходим к концу кода sed с пространством шаблонов. OTW, 3 или меньше косых черт будут присутствовать в пространстве шаблона. Теперь мы проверяем, можно ли заменить третью косую черту новой строкой \n
в пространстве шаблонов. Если после этой подстановки мы видим перевод строки => во вводе было ровно три косых черты. Поскольку мы не хотим видеть ровно 3 слэша, мы удаляем это пространство шаблона. OTW, все, что осталось (=> шаблонное пространство с 2 или меньшими косыми чертами )выводится на стандартный вывод.
Примечание:\n
в этом последнем случае найти не удалось, так как замена s//\n/3
не удалась.
Еще одним методом, использующим POSIX sed
, является:
$ sed -e h -e 's|[^/]||g' -e '/^.\{3\}$/d' -e g inp
Сохраните копию текущей записи и удалите все символы без косой черты. Теперь проверьте, есть ли ровно три символа (на самом деле, теперь они все )косые черты в пространстве шаблона. Если да, мы сразу же удаляем его. OTW, вызовите сохраненную запись из хранилища, а затем sed распечатает ее по умолчанию для вас.
ХТН.