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

У меня есть файл со следующим содержанием:

Windows user
I love windows
Windows 10
# I like it
# I want to keep these two lines
Just started with my job
New to shell scripting as well
New to Mac
Please help!

#EOF

Я хочу удалить все строки:

запуск с"I love windows"к"New to shell scripting as well", но сохраните комментарии, которые присутствуют между этими строками.

Так, желаемый вывод должен появиться как указано ниже:

Windows user
# I like it
# I want to keep these two lines
New to Mac
Please help!

#EOF

Я использовал sed команда для удаления диапазона строк с помощью номеров строки

sed '2,7d' file

Но эта команда удаляет комментарии также, которые я хочу сохраненный.

3
задан 13 September 2018 в 21:00

1 ответ

Использование попытки:

sed '2,7{/^[[:blank:]]*#/!d}' infile

Это обычно удаляет строки от 2~7, но не строки, который запускается с хеша, как известный как прокомментированная строка.

[[:blank:]] класс символов используется, чтобы соответствовать и сохранить те строки, в которых это - прокомментированная строка, но проводило пробелы позади также или нуль или больше пробела.

Более конкретно использовать данные шаблоны:

sed '/I love windows/,/New to shell scripting as well/ {/^[[:blank:]]*#/!d}' infile

стандартная жалоба sed решение было бы:

sed -e '2,7{' -e '/^[[:space:]]*#/!d' -e '}' infile

считать номер строки из переменной, просто двойная кавычка Ваши переменные как "$line" (связанный: Как я использую переменные в команде sed?.)

line=2; sed -e "$line"',7{' -e '/^[[:space:]]*#/!d' -e '}' infile

Вывод:

Windows user
# I like it
# I want to keep these two lines
New to Mac
Please help!

#EOF
5
ответ дан 1 December 2019 в 15:33

Другие вопросы по тегам:

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