Как я пишу sed остроту для добавления символа после каждого третьего символа?

Среди всех других ответов, здесь включающих историю.

Я установил

HISTFILESIZE=2024
HISTSIZE=1024

в ~/.bash_profile

В дополнение к другому ре комментариев: история

Другая полезная функция...

Начало истории вспоминает с

!first few letters<ESC>Ctrl-E

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

например:

!find<ESC>Ctrl-E

Вы не упоминали, используете ли Вы GUI или командную строку только. При использовании GUI можно использовать одного из персистентных менеджеров по буферу обмена к скопировать/вставить наиболее часто используемым командам, идентификаторам пользователей, паролям, URL, и т.д.

10
21.12.2012, 23:06
4 ответа

Так как Вы не хотите запаздывание +, Вы могли сделать:

fold -w3 | paste -sd+ -

Таким образом, сверните строки на 3 ширине символов и вставьте те 3 символьных строки с собой с + как разделитель, который в действительности похож на изменение каждого символа новой строки, но последнего в a +. Если вход имел больше чем одну строку, Вы закончите с теми строками, к которым присоединяются с a + который может или не может быть тем, что Вы хотите.

Если Вам действительно нужен он, чтобы быть sed, можно удалить запаздывание + после:

sed 's/.../&+/g;s/+$//'
16
27.01.2020, 19:59
  • 1
    Вы возражали бы добавлять короткое объяснение того, как это работает? –  N.N. 21.12.2012, 22:35
  • 2
    @N.N. Это работает потому что +$ соответствует плюс символ сразу до конца строки. –  Chris Down 21.12.2012, 23:14
  • 3
    fold -w3 повреждает строку в 3 символьных строки. paste -sd+ - поворачивает новые строки в +. очень хороший –  bahamat 22.12.2012, 05:40
sed 's/.../&+/g'

для получения способа работать, Вы не должны выходить {} символы:

sed -r 's/([A-Z]{3})/\1+/g'
12
27.01.2020, 19:59
  • 1
    , кто знал! я был так близок все же до сих пор... спасибо... –  ixtmixilix 21.12.2012, 22:10
  • 2
    , Оба добавляют запаздывание '+'. Это предназначается? –  N.N. 21.12.2012, 22:25

Это могло бы работать на Вас (GNU sed):

sed 's/...\B/&+/g' file
2
27.01.2020, 19:59

Если sed не, необходимость с помощью Ruby могла бы быть альтернативой. Интерпретатор Ruby, ruby, может использоваться как sed и awk путем выполнения его с -n опция, которая заставляет его выполнить итерации по ее входу. Интерпретатор может затем быть каналом с остротой Ruby путем добавления его как аргумента -e опция (который говорит интерпретатору интерпретировать аргумент -e вместо того, чтобы искать сценарий в файле).

Для этой конкретной проблемы можно использовать следующую остроту (адаптированный от https://stackoverflow.com/a/3184271/789593):

ruby -ne 'puts $_.scan(/.{3}|.+/).join("+")'

На простом языке это

  • соответствия любые 3 символа или по крайней мере один символ, scan(/.{3}|.+/), во входной строке, $_ (в этом случае вход, как ожидают, прибудет из стандарта в), и помещает каждое соответствие в массив,
  • присоединяется к массиву в строку с '+' соединяющий каждый элемент, join("+"),
  • и печать завершенный новой строкой puts.

Например,

echo "AUGGCCAUGGCGCCCAGAACUGAGAUCAAUAGUACCCGUAUUAACGGGUG" | ruby -ne 'puts $_.scan(/.{3}|.+/).join("+")'
AUG+GCC+AUG+GCG+CCC+AGA+ACU+GAG+AUC+AAU+AGU+ACC+CGU+AUU+AAC+GGG+UG

Обратите внимание, что это не добавляет запаздывания '+'.

0
27.01.2020, 19:59

Теги

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