как удалить строки комментария (как # шахта bla) и пустые строки (строки без символов) из файла с одной командой sed?
СПАСИБО lidia
Если вы беспокоитесь о запуске двух процессов sed
в конвейере вместо одного, вам, вероятно, не стоит этого делать, это не , что неэффективно.
Однако, если вы действительно хотите использовать один процесс, вы можете использовать несколько аргументов -e
, например:
sed -e 's/#.*$//' -e '/^$/d' inputFile
В ответ на ваш комментарий к почему вам нужен единственный процесс, желающий использовать sed -i
для редактирования на месте, вы все равно можете сделать это согласно следующей расшифровке:
pax> echo 'Line # with a comment' >qq
pax> echo >>qq
pax> echo '# Line with only a comment' >>qq
pax> cat qq
Line # with a comment
# Line with only a comment
pax> sed -i -e 's/#.*$//' -e '/^$/d' qq
pax> cat qq
Line
pax> _
Обратите внимание, как файл изменяется на месте даже с двумя параметрами -e
. Вы можете видеть, что обе команды выполняются в каждой строке. Строка с комментарием сначала удаляет комментарий, затем удаляется все, потому что она пуста.
Кроме того, также удаляется исходная пустая строка.
вы можете использовать awk
awk 'NF{gsub(/^[ \t]*#/,"");print}' file
Альтернативный вариант с использованием grep:
cat file.txt | grep -Ev '(#.*$)|(^$)'