Используя sed для вырезания строки, запускающейся с пробелов n и заканчивающейся пробелами n

Я не знаю, предпочитаете ли вы это решение, но для debian доступна более новая версия iceweasel: Debian Mozilla Team

Чтобы перейти к текущему выпуску, добавьте его в свой /etc/apt/sources.list

deb http://mozilla.debian.net/ wheezy-backports iceweasel-release

, а затем обновите свою систему. (Или проверьте веб-сайт для других выпусков).

PS: Это также решает вашу другую проблему (кодек 264).

1
14.01.2015, 01:32
5 ответов

Мы рассказали о некоторых текста, уставившись с неизвестным количеством пробелов, так что

sed 's/.* \{2,\}\([[:alnum:]].*\) \{2,\}.*/\1/'

или с -r (-e)

sed -E 's/.* {2,}([[:alnum:]].*) {2,}.*/\1/'

кажется достаточно, но GREP лучше в корпусе

grep -Po ' {2,}\K[[:alnum:]].*(?= {2,})'

, а не так сильный (Просто с двумя пробелами), но и правильно тоже:

sed -E 's/.*  (\w.*)  .*/\1/'
1
27.01.2020, 23:51

Я верю, что вы пытаетесь поймать титул?

Вот нам способ ловить вещи, избавившись от первого слова и последние 2 слова, и отображение остальных (пробелов):

awk '{ $1=""; $(NF-1)="" ; $NF="" ; print $0}'

или Еще лучше: избавиться от первого элемента и отказаться от последних 2, а также дополнительные пробелы (изменение $ n или NF, заставляет перерисовать $ 0 на большинство внедрений AWK):

awk '{ shift ; NF=(NF-2); print $0}'

Пример

$   echo   ' 01      Title is   here!     Chapter 01' | awk '{ shift ; NF=(NF-2); print $0}'

 Title is here!

Преимущество awk Это легко добавить тесты (это $ 1 целое число? Глава «$ (NF-1)»? ETC)

0
27.01.2020, 23:51

Редактировать: Я заимствовал флаг -R -R [включает расширенный синтаксис Regex) от Джиммии, чтобы вылечить обратный ответ.

Следующие работы в следующих условиях:

  • Вы готовы сказать, что полевой сепаратор не менее N пробелов, например 3
  • Содержание интересных проблем не включает в себя пространство в любом месте.

В этом случае это Regex работает:

    echo ' 01      Title      Chapter 01' |
    sed -r 's/^.* {3,}([^ ]+) {3,}.*$/\1/'

или, в случае, если вам нравятся ваши обратные язвы, это то, что это выглядит как в неэлированном синтаксисе REGEX:

    echo ' 01      Title      Chapter 01' |
    sed 's/^.* \{3,\}\([^ ]\+\) \{3,\}.*$/\1/'

Объяснение регенса:

^        start of line
.*       any number of characters at the start of the line
 {3,}    at least 3 spaces
([^ ]+)  1 or more non-space characters (capture this group as \1)
 {3,}    at least 3 spaces
.*       anything on the rest of the line
$        end of the line. Not needed, because of the .*, but nicely explicit.
0
27.01.2020, 23:51

Для расширенного регулярного выражения, в котором количество символов может быть указано внутри {}, можно использовать опцию -r, таким образом, все слова -, окруженные 6 пробелами, будут распечатаны следующим образом:

sed -r 's/.* {6}(\w*) {6}.*/\1/'

В случае, если в заголовке заголовка также есть пробелы, лучшим выбором будет

sed -r 's/.* {6}(.*) {6}.*/\1/'
0
27.01.2020, 23:51

Если предположить, что с обеих сторон нужно одинаковое количество пробелов:

$ sed -r 's/(^|.*[^[:space:]])([[:space:]]+)([^[:space:]]+)\2([^[:space:]].*|$)/\3/g' <<<"01      Title      Chapter 01"
Title

(Я использовал символьный класс вместо простого , с пробелом, выражение должно быть значительно короче: sed -r 's/(^|.*[^ ])( +)([^ ]+)\2([^ ].*|$)/\3/g')).

Используя обратную ссылку внутри LHS, мы гарантируем, что с обеих сторон присутствует одинаковое количество пробелов.

0
27.01.2020, 23:51

Теги

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