Все строки с комментариями в файле начинаются с #
. Как удалить все строки (и только те строки), которые начинаются с #
? Другие строки, содержащие #
, но не в начале строки, следует игнорировать.
Удалить все строки, начинающиеся С# из файла
Ответ 1
Это можно сделать с помощью sed one-liner:
sed '/^#/ d'
Это говорит: "Найдите все строки, начинающиеся С#, и удалите их, оставив все остальное".
Ответ 2
Я немного удивлен, что никто не предложил наиболее очевидное решение:
grep -v '^#' filename
Это решает проблему, как указано.
Но обратите внимание, что общее соглашение предназначено для всего: от #
до конца строки, которое должно рассматриваться как комментарий:
sed 's/#.*$//' filename
хотя это относится, например, к символу #
в строковом литерале как начало комментария (которое может быть или не быть релевантным для вашего случая) (и оно оставляет пустые строки).
Строка, начинающаяся с произвольного пробела, за которым следует #
, также может рассматриваться как комментарий:
grep -v '^ *#' filename
если пробелы - это пробелы или
grep -v '^[ ]#' filename
где два пространства на самом деле представляют собой пробел, за которым следует буквальный символ табуляции (введите "вкладка управления-v" ).
Для всех этих команд опустите аргумент filename
для чтения со стандартного ввода (например, как часть канала).
Ответ 3
Противоположность решению Раймонда:
sed -n '/^#/!p'
"ничего не печатают, кроме строк, которые НЕ начинаются С#"
Ответ 4
Вы можете использовать следующее для решения awk -
awk '/^#/ {sub(/#.*/,"");getline;}1' inputfile
Ответ 5
Вы можете напрямую редактировать свой файл с помощью
sed -i '/^#/ d'
Если вы также хотите удалить строки комментариев, начинающиеся с пробелов, используйте
sed -i '/^\s*#/ d'
Обычно вы хотите сохранить первую строку вашего скрипта, если это sha-bang, поэтому sed
не следует удалять строки, начинающиеся с #!
. также следует удалить строки, которые содержат только хэш, но не содержат текста. собрать все вместе:
sed -i '/^\s*\(#[^!].*\|#$\)/d'
Чтобы соответствовать всем вариантам sed, необходимо добавить расширение для резервной копии в опцию -i
:
sed -i.bak '/^\s*#/ d' $file
rm -Rf $file.bak
Ответ 6
Этот ответ основывается на более раннем ответе Keith.
egrep -v "^[[:blank:]]*#"
следует отфильтровать строки комментариев.
egrep -v "^[[:blank:]]*(#|$)"
должен отфильтровывать как комментарии, так и пустые строки, как это часто бывает полезно.
Информацию о [:blank:]
и других классах символов см. в https://en.wikipedia.org/wiki/Regular_expression#Character_classes.
Ответ 7
чтобы удалить символ комментария (#), но сохранить остальную часть строки и сохранить sha-bang:
awk '{ if( ($0 !~ /^ *#/) || ($0 ~ /^ *#!/) ) print $0 ; else {gsub(/^ *#/ , "" ); print } } ' teste.sh nter code here
Ответ 8
Вот он с циклом для всех файлов с некоторым расширением:
ll -ltr *.filename_extension > list.lst
for i in $(cat list.lst | awk '{ print $8 }') # validate if it is the 8 column on ls
do
echo $i
sed -i '/^#/d' $i
done