сопоставление с образцом sed

Вы могли записать долгую команду как функцию оболочки, которая берет имя файла в качестве параметра, и затем просто введите function filename когда Вам нужен он.

2
27.04.2012, 02:01
3 ответа

Во-первых, они все также, кажется, работают просто великолепно:

sed 's/[ ]*  / /g'
sed 's/  [ ]*/ /g'
sed 's/ *  / /g'
sed 's/  * / /g'
sed 's/   */ /g'
sed 's/  \+/ /g'
sed 's/ \+ / /g'

В основном все, что это делает, соответствует 2 пробелам плюс любое количество последовательных пробелов. Это работает, потому что regex является жадным по умолчанию, таким образом, "любое число" является столько, сколько это может найти. (И [ ] "соответствие любой из них" только с перечисленным пробелом),

Конкретный синтаксис, используемый в вопросе, идеален просто, потому что Вы имеете дело с пробелами:

sed 's/ [ ]* / /g'

Никакие два пробела не смежны, так легки видеть сразу, что существует 3 пробелов, и меньше, вероятно, будет интерпретировано как опечатка.

3
27.01.2020, 21:50
  • 1
    Только для полноты, sed 's/ \{2,\}/ /g' также делает то же самое. –  manatwork 27.04.2012, 13:20
sed 's/ [ ]* / /g'
\_/  | \____/ | |
 |   |    |   | \- g=globally (not just one occurence)
 |   |    |   |
 |   |    |   \- to
 |   |    |
 |   |    \- from
 |   |
 |   \- s=substitute
 |
 \- program sed

От части:

/ [ ]* /
| \_/| 
|  | \- repeated 0-infinite times
|  |
|   \- group of characters
|
\- boundary

Включая *, существует 3 квантора:

  • 0 к бесконечности? 0 или 1 раз
  • 1 к бесконечности

Они обычно только обращаются к последнему знаку, таким образом, x* соответствует x, xxxx и ничему. x? соответствия 0 или 1 x, + соответствует x, xx, xxx и так далее. Но это может соответствовать группе символов как [aeiou] + или комбинация, инкапсулировавшая в parens: (нечто) *. Первые соответствия iiaiaei, второе нечто и foofoo.

Группа может быть перечислением [aeiou] или от - для группировки: [a-z] или комбинация: [0-9a-fA-F:]. Если Вам нравится включать минус в группу, необходимо поместить ее в конец или начало: [-:].

Наиболее используемая команда, вероятно', для замены. Другие являются 'd' для, удаляют и 'p' для печати.

Шаблоны инкапсулируются между разделителями, обычно режут.

 sed 's/foo/bar/' 

Строка работ Sed ориентирована. Если Вам нравится заменять один (первое), нечто с панелью, выше команды хорошо. Для замены всех Вам нужен 'g' для глобально.

 sed 's/foo/bar/g' 

Другие способы работать с sed вызывают номера строки:

 sed -n '1,5p' file 

- n не распечатает по умолчанию, 1,5p средства: печать от строки 1 - 5.

 sed '6,$d' file 

Это эквивалентно. Это удалит из строки 6 для окончания.

 sed '5q' file

снова то же: выход после строки 5.

Обычно для sed, который команды более легки записать, чем читать.

5
27.01.2020, 21:50
  • 1
    Спасибо за то, что разломали это на крохотные части - действительно полезный! –  paulrehkugler 26.04.2012, 21:06

Лучшая sed инструкция когда-либо.

sed 's/ [ ]* / /g'

заменит все два или большие последовательности пробелов в одно пространство, поэтому все слова будут разграниченным пространством.

2
27.01.2020, 21:50

Теги

Похожие вопросы