Вы могли записать долгую команду как функцию оболочки, которая берет имя файла в качестве параметра, и затем просто введите function filename
когда Вам нужен он.
Во-первых, они все также, кажется, работают просто великолепно:
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 пробелов, и меньше, вероятно, будет интерпретировано как опечатка.
sed 's/ [ ]* / /g'
\_/ | \____/ | |
| | | | \- g=globally (not just one occurence)
| | | |
| | | \- to
| | |
| | \- from
| |
| \- s=substitute
|
\- program sed
От части:
/ [ ]* /
| \_/|
| | \- repeated 0-infinite times
| |
| \- group of characters
|
\- boundary
Включая *, существует 3 квантора:
Они обычно только обращаются к последнему знаку, таким образом, 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, который команды более легки записать, чем читать.
Лучшая sed инструкция когда-либо.
sed 's/ [ ]* / /g'
заменит все два или большие последовательности пробелов в одно пространство, поэтому все слова будут разграниченным пространством.
sed 's/ \{2,\}/ /g'
также делает то же самое. – manatwork 27.04.2012, 13:20