POSIX, вы бы сделали:
sed '
s|[[:blank:]]*//.*||; # remove //comments
s|[[:blank:]]*#.*||; # remove #comments
t prune
b
:prune
/./!d; # remove empty lines, but only those that
# become empty as a result of comment stripping'
Что с помощью GNU sed
мы можем сократить до:
sed -E 's@[[:blank:]]*(//|#).*@@;T;/./!d'
Обратите внимание, что он с радостью удалит #things
и //things
, которые не являются комментариями, как в:
const url = 'http://stackexchange.com';
x = "foo#bar";
Чтобы игнорировать #
, //
внутри кавычек, вы можете сделать:
perl -ne 'if (/./) {
s{\s*(?://|#).*|("(?:\\.|[^"])*"|'"'(?:\\\\.|[^'])*'"'|.)}{$1}g;
print if /./} else {print}'
На входе типа:
#blah
// testies one
const testies = 'two';
console.log(testies) // three
const url = 'http://stackexchange.com';
x = "not#a comment";
y = "foo\"bar" # comment
y = 'foo\'bar' # it's a comment
Дает:
const testies = 'two';
console.log(testies)
const url = 'http://stackexchange.com';
x = "not#a comment";
y = "foo\"bar"
y = 'foo\'bar'
(возможно, вам придется адаптироваться к реальному языку этих файлов (Я не знаю, поддерживает ли JavaScript #
в качестве комментария, за исключением, может быть, первой строки, начинающейся с #!
в node.js )).
Как отмечают Икар и А.Б. это было связано с тем, что провайдер использовал OpenVZ.
С тех пор я переключил провайдера (на провайдера, использующего KVM ), и проблема исчезла.