Похоже, вы просто хотите начать печать с первой строки, которая не пуста и не является просто комментарием:
$ awk 'NF && ($1 !~ "^//"){f=1} f' file
print "Hi"
// This should not be deleted
print "Hello"
Приведенное выше просто устанавливает флаг f
, когда он находит такую строку и печатает каждую строчку с тех пор. Он будет работать с любым awk в любой оболочке в каждом поле UNIX.
Обратите внимание, что, в отличие от некоторых из опубликованных потенциальных решений, он не хранит в памяти более 1 строки за раз, и поэтому будет работать независимо от размера вашего входного файла.
Он был протестирован на этом входе:
$ cat file
// This is the header
// This should be deleted
print "Hi"
// This should not be deleted
print "Hello"
Чтобы запустить вышеуказанное для многих файлов одновременно и изменить каждый файл, как вы, go это с GNU awk:
awk -i inplace 'NF && ($1 !~ "^//"){f=1} f' *
и это с любым awk:
ip_awk() { local f t=$(mktemp) && for f in "${@:2}"; do awk "$1" "$f" > "$t" && mv -- "$t" "$f"; done; }
ip_awk 'NF && ($1 !~ "^//"){f=1} f' *