Подтвердить что ты не робот

Заменить строки с использованием Sed And Regex

Я пытаюсь раскомментировать содержимое файла, используя sed, но с помощью regex (например: [0-9] {1,5})

# one two 12
# three four 34
# five six 56

Следующее работает:

sed -e 's/# one two 12/one two 12/g' /file

Тем не менее, я хотел бы использовать шаблон регулярных выражений для замены всех совпадений без ввода чисел, но сохранить цифры в результате.

4b9b3361

Ответ 1

Для выполнения примера вопроса просто

sed 's/^# //' file

будет достаточно, но если необходимо удалить комментарий только в некоторых строках, содержащих определенное регулярное выражение, вы можете использовать условный адрес:

sed '/regex/s/^# //' file

Таким образом, все строки, содержащие regex, не будут закомментированы (если строка начинается с #)

... где regex может быть [0-9]$ как:

sed '/[0-9]$/s/^# //' file

удалит # в начале строк, содержащих число в качестве последнего символа.

И

sed '/12$/s/^# //' file

удалит # в начале строк, оканчивающихся на 12. Или

sed '/one two/s/^# //' file

удалит # в начале строк, содержащих one two.

Ответ 2

sed -e 's/^#\s*\(.*[0-9].*\)$/\1/g' filename

должен это сделать.

Ответ 3

Следующая команда sed будет раскомментировать строки, содержащие числа:

sed 's/^#\s*\(.*[0-9]\+.*$\)/\1/g' file

Ответ 4

Если вы хотите, чтобы эти строки были без ранения, содержащие цифры, вы можете использовать это:

sed -e 's/^#\s*\(.*[0-9]+.*\)/\1/g' file

Ответ 5

Не требуется ли опция -i для замены в соответствующем файле? Я могу удалить ведущий #, используя следующее:

sed -i "s/^# \(.*\)/\1/g" file

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

sed -i "s/^# \(.*[[:digit:]]\+$\)/\1/g" file

Это решение требует, чтобы прокомментированные строки начинались с одного символа пробела (прямо за #), но это должно быть легко настроить, если не применимо.

Ответ 6

Я нахожу это. благодаря всем вам

echo "# one two 12" | grep "[0-9]" | sed 's/# //g'

или

cat file | grep "[0-9]" | sed 's/# //g'