У меня есть файл со следующим содержанием:
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
Но эта команда удаляет комментарии также, которые я хочу сохраненный.
Использование попытки:
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