В файле, содержащем такие строки:
# lorem ipsum blah variable
Я хотел бы удалить #
(комментарий) символ в той же строке, которая содержит конкретную строку, на месте. Это sed
хорошо для этого?
Я изо всех сил пытаюсь заставить это условно работать. У меня есть "неуклюжий" способ сделать это; Я могу найти соответствующий номер строки с помощью awk
или, sed
а затем использовать этот номер в отдельной sed
команде, но я считаю, что это можно сделать намного лучше.
's/#//g'
удалит все те#
символы в строке. Если это не то, что вы хотите, удалитеg
(что означает «глобальный»). (2) Чтобы редактировать файл на месте (как указано в вопросе), используйтеsed -i
.sed -i '/ipsum/s/#[[:space:]]*//'
, чтобы избавиться от пробелов и табуляций, следующих сразу за#
. (4) Вы также можете рассмотреть возможность проверки того, что#
это первый непустой символ в строке. Текущая команда удалит#
из строкиprompt "Enter # of ipsums:"
.sed -i '/ipsum/s/^#[[:space:]]*//'
?! (^
означает начало строки,$
для конца строки) - по крайней мере, в gnu sed ...^
, но это было бы неправильно. Я часто закомментирую код с отступом, помещая#
непосредственно перед кодом, поэтому#
отступ. Я сомневаюсь, что я единственный человек, который делает это.^
&#
, так что- то более , как это:/ipsum/{/^[[:space:]]*#/s/#[[:space:]]*//}
. Хотя даже в этом случае, в зависимости от того, где он#
находится, он все равно может вызывать проблемы (например, в языках, которые используют отступ / разделение пробелов).тогда:
дает:
Это работает следующим образом:
s
Говорит ,sed
что он должен заменить то , что регулярное выражение находит.Шаблон,
# \(.*blue.*\)
который разбивается на: Найти хеш с пробелом. Скобка (\(
) начинает группировку..*blue.*
это словоblue
с чем-либо до и после. Следующая скобка (\)
) закрывает группировку.Замена -
\1
это обратная ссылка на содержимое первой группирующей скобки.источник
Вы можете использовать Vim в режиме Ex:
s
заменаx
сохранить и закрытьисточник