Я хотел бы знать, есть ли способ, которым я мог бы cat
подать как php.ini
и удалить все строки, начинающиеся с;
Например, если файл содержал это:
; - Show all errors, except for notices
;
;error_reporting = E_ALL & ~E_NOTICE
;
; - Show only errors
;
;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
;
; - Show all errors except for notices
;
error_reporting = E_ALL & ~E_NOTICE
и я выполнил правильную команду cat | {remove comments command}
, тогда я бы в итоге:
error_reporting = E_ALL & ~E_NOTICE
Примечание - Я предполагал , что cat
будет лучшим способом сделать это , но я на самом деле хорошо с ответом с помощью другой утилиты , как awk
, sed
, egrep
и т.д.
error_reporting = E_ALL & E_NOTICE ; Show all errors, except for notices
? Следует ли удалять комментарий и в этом случае?cat
это инструмент для объединения файлов.grep
инструмент для фильтрации линий по шаблонамsed
иawk
может также изменить эти строки.Ответы:
Вы можете использовать:
источник
Вам не нужно передавать файл через grep, grep принимает имена файлов в качестве аргументов командной строки.
напечатает все строки, кроме тех, которые начинаются с символа #. Вы можете изменить комментарий char на что угодно.
Если у вас есть более одного комментария char (предполагается, что в начале строки)
источник
grep '^[^;]' filename
. Я не могу говорить с его мобильностью, хотя!egrep
являетсяgrep -E
. Можно также использоватьgrep -ve '^[;#]' -e '^//'
egrep
может спасти вас от использованияcat
. Другими словами, создайте меньше процессов (egrep
vscat
+egrep
) и используйте меньше буферов (конвейер отcat
кegrep
против конвейера)Обычно рекомендуется ограничить использование,
cat
если вы просто хотите передать файл команде, которая может прочитать его самостоятельно.С учетом сказанного следующая команда удалит комментарии, даже если они имеют отступы или пробелы:
источник
[[
класса символов]]
с использованиемegrep
команды, которая устарела как минимум десять лет или около того.это исключит строки, начинающиеся с ';', и пустые строки.
в регулярном выражении
^
указывает начало строки и$
конец строки, поэтому^$
указывает строки, где символ начала строки и символ конца строки расположены рядом друг с другом.источник
egrep -v '^;'
egrep -v '^[[:blank:]]*;' file.ini
Простой
awk
однострочникawk '/^;/{next}1' input_file
должен сделать свое дело.источник
awk '!/^;/' input_file
достаточно.Как и Jaypal, я также, скорее всего, использовал бы
awk
для этих целей. Еще хуже упомянуть, что Perl иногда очень удобен для таких целей:Регулярные выражения Perl более мощные, чем в awk, и иногда они могут понадобиться.
источник
perl -ne 'print unless /^;/' data.txt
cat
работает хорошо в этих примерах, если вы рассматриваете его как прокси для более общего «всего, генерирующего текст на STDOUT». Unix трубы - лучшая вещь из нарезанного хлеба, imho. :)Подробно об ответе @ shabunc, в котором используется Perl для удаления комментариев (включая встроенные комментарии), а затем печати любых строк, содержащих что-либо, кроме пробелов.
Объяснение:
s/;.*//
использует оператор подстановки (s/<regex>/<replacement>/
) для замены экземпляров точки с запятой и всего, что следует за ней в строке, пустой строкой.print if /\S/
печатает строку, если она соответствует регулярному выражению\S
, которое является классом символов, соответствующим всем непробельным символам.источник
Вот тот, который я использую, просто замените ';' с символом комментария (например, '#' для многих файлов конфигурации службы UNIX):
Это избавляет от всех целочисленных комментариев (даже если они имеют начальные пробелы), а также от любых комментариев, которые заканчивают строки без комментариев, и кратко удаляет пустые строки из вывода. Это может быть возможно без конвейера (мой sed- или awk-fu, по общему признанию, не очень хорош), но мне так легко понять (и запомнить), что я решил опубликовать это здесь
источник
Пример показывать только строки + не показывать новые строки или строки emtpy:
ИЛИ
источник
egrep
давно устарело.grep -E
это команда, которую вы ищете здесь.Удаляет все комментарии и пустые строки из файла file.txt.
источник
egrep
амортизируется Используйтеgrep -Ev
вместо этого.Будут лишать и пустые строки
источник
Вы можете использовать следующую команду для сохранения строк, исключая пустые строки и строки, начинающиеся с # в новом файле
cat <file to be read> | egrep -v '^#|^$' > <file to be written at>
источник
cat
труба иegrep
амортизируется и должна быть замененаgrep -E
на расширенные выражения или простоgrep -v
.