Видалити рядки, що починаються з #


10

Як видалити рядки, що починаються з значка #, зважаючи на те, що зліва і справа від місця може бути пробіл #?

  # Master socket provides access to userdb information. It's typically

Відповіді:



10

Ви можете використовувати grepдля цього

grep -vh '^[[:space:]]*#' filename

Оскільки, як я припускаю, ви знімаєте коментарі з якогось файлу, ви також можете розглянути питання про видалення порожніх рядків, що розширює вищезазначене на:

grep -vh '^[[:space:]]*\(#\|$\)' filename

3

awk рішення - інвертувати відповідність шаблону.

$> cat ./text
elephant
# Master socket provides access to userdb information. It's typically
zoo
 #ok
penguin
# !

$> awk '!/^(\ )*#/ {print $0}' ./text
elephant
zoo
penguin

4
Немає необхідності екранувати символ пропуску, не потрібно , щоб захопити пробіл, немає необхідності визначати дію за замовчуванням: awk '!/^ *#/' ./text.
манатурка

awk '/^ *#/{next}1' fileмає бути досить хорошим.
jaypal singh


0

Використання зразкових даних, розміщених ДМИТРИЙ МАЛИКОВ ...

$ grep -vPh '^\s*#' filename.txt | grep -Po '\w+'
elephant
zoo
penguin

Я вважаю за краще використовувати pcre з grep, тому використовую перемикач -P для grep (повинен бути GNU grep). Другий греп - це чистий цукор, щоб дати вам слова без пробілу. Це також "видалить" порожні рядки.


-1
$ perl -pi -e '$_="" if /^\s*#/' filename

Це не добре - не видаляє рядки і очищає рядки , якa#b
Мат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.