Запутались в команде: sed '/ ^ # / d' ~ / .profile

Нет, но вы можете скопировать содержимое любого регистра в переменную Vim, а затем использовать их как "виртуальные регистры".

" Copy the default register.
:let foo = @"

" Use it; from normal mode: "=foo<CR>p
:put =foo
2
21.11.2018, 23:16
2 ответа

/^#/ соответствует строкам, которые начинаются (^) с #. d удаляет их. Действие по умолчанию sed состоит в том, чтобы напечатать строку (если не задано -n), поэтому печатается все остальное.

Я знаю, что # может означать конец команды или комментария.

Я знаю, что $ указывает на начало команды.

Мм, нет. В регулярных выражениях ^ отмечает начало строки (или строки), $ конец. # используется как символ комментария, поэтому обычно в начале строки.

Обратите внимание, что многие файлы, использующие # в качестве символа комментария, позволяют использовать его после команды или иначе не непосредственно в начале строки. Он может быть с отступом, как в комментарии, оставшемся в вашем примере.

Что-то вроде /^ *#/d (или /^[ \t]*#/d) может быть лучше, так как оно также удалит комментарии с отступом.

2
27.01.2020, 21:53

Командная строка sed

sed '/^#/d' ~/.profile

удалит все комментарии оболочки, которые начинаются в начале строки из файла ~/.profile, например первая, но не вторая, из следующих двух строк:

# comment
  # indented comment

Он делает это, пытаясь сопоставить # в начале строки (^) и удаляет ( d) любые совпадающие строки.

Чтобы удалить комментарии с отступом из сценария оболочки, используйте

sed '/^[[:blank:]]*#/d' file

[[:blank:]] будут соответствовать пробелам и горизонтальным табуляциям.


$ означает только «начало команды» в том смысле, что это обычное приглашение, используемое оболочкой, чтобы предложить вам ввести что-то в командной строке.

# — это символ, который представляет комментарий в оболочке. Он не служит никакой цели в сценарии sed, кроме как для сопоставления # во вводе1. Я никогда не видел, чтобы оно использовалось для обозначения «конца команды».


1 Символ # вводит комментарий и в сценарии sed, если используется между командами.

4
27.01.2020, 21:53

Теги

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