Удалить все строки, начинающиеся с # из файла - PullRequest
148 голосов
/ 21 ноября 2011

Все строки с комментариями в файле начинаются с #.Как я могу удалить все строки (и только те строки), которые начинаются с #?Другие строки, содержащие #, но не в начале строки, следует игнорировать.

Ответы [ 7 ]

248 голосов
/ 21 ноября 2011

Это можно сделать с помощью однострочного sed :

sed '/^#/ d'

Это говорит: «найдите все строки, начинающиеся с #, и удалите их, оставив все остальное».

49 голосов
/ 21 ноября 2011

Я немного удивлен, что никто не предложил наиболее очевидное решение:

grep -v '^#' filename

Это решает проблему, как указано.

Но обратите внимание, что общее соглашение для всего от# до конца строки, которая будет рассматриваться как комментарий:

sed 's/#.*$//' filename

, хотя, например, символ # в строковом литерале рассматривается как начало комментария (который можетили может не относиться к вашему случаю) (и он оставляет пустые строки).

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

grep -v '^ *#' filename

если пробелами являются только пробелы, или

grep -v '^[  ]#' filename

, где два пробела фактически являются пробелом, за которым следует буквенный символ табуляции (тип "control-v tab").

Для всех этихВ командах пропустите аргумент filename для чтения из стандартного ввода (например, как часть канала).

13 голосов
/ 21 ноября 2011

Противоположность решения Рэймонда:

sed -n '/^#/!p'

"ничего не печатать, кроме строк, которые не начинаются с #"

7 голосов
/ 21 ноября 2011

Для решения awk вы можете использовать следующее -

awk '/^#/ {sub(/#.*/,"");getline;}1' inputfile
5 голосов
/ 30 октября 2013

Этот ответ основан на предыдущем ответе Кейта .

egrep -v "^[[:blank:]]*#" должен отфильтровывать строки комментариев.

egrep -v "^[[:blank:]]*(#|$)" должен отфильтровывать как комментарии, так и пустые строки, что часто бывает полезно.

Для получения информации о [:blank:] и других классах символов см. https://en.wikipedia.org/wiki/Regular_expression#Character_classes.

4 голосов
/ 05 июня 2017

вы можете напрямую редактировать свой файл с помощью

sed -i '/^#/ d'

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

sed -i '/^\s*#/ d'

Обычно вы хотите оставить первую строкувашего сценария, если это sha-bang, поэтому sed не должен удалять строки, начинающиеся с #!.также следует удалить строки, которые содержат только хэш, но не содержат текста.собрать все вместе:

sed -i '/^\s*\(#[^!].*\|#$\)/d'
0 голосов
/ 28 сентября 2017

Вот он с циклом для всех файлов с некоторым расширением:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...