sed + удаляют “#\” и пустые строки с одной командой sed

как удалить строки комментария (как # шахта bla) и пустые строки (строки без символов) из файла с одной командой sed?

СПАСИБО lidia

23
задан lidia 28 July 2010 в 05:49
поделиться

3 ответа

Если вы беспокоитесь о запуске двух процессов 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 . Вы можете видеть, что обе команды выполняются в каждой строке. Строка с комментарием сначала удаляет комментарий, затем удаляется все, потому что она пуста.

Кроме того, также удаляется исходная пустая строка.

33
ответ дан 29 November 2019 в 01:23
поделиться

вы можете использовать awk

awk 'NF{gsub(/^[ \t]*#/,"");print}' file
1
ответ дан 29 November 2019 в 01:23
поделиться

Альтернативный вариант с использованием grep:


cat file.txt | grep -Ev '(#.*$)|(^$)'
3
ответ дан 29 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: