У меня есть файлы, которые выглядят так:
username
Total 0
username
Total 0
username
Total 0
username
Total 0
username
Total 0
Но некоторые из них искажены и имеют неправильную первую строку, например:
Total 0
username
Total 0
username
Total 0
username
Total 0
username
Total 0
Мне нужен один лайнер, который удалит первую строку, если она не содержит username
я пробовал это с sed, но это не работает:
sed -e '1!b' -e '/username/!d'
То, что у вас есть, должно работать. Можно было бы и это написать sed -e '1{ /username/!d; }', но явно происходит что-то другое.
или хочешь sed -i?
да, были невидимые символы, препятствующие работе оригинального sed, спасибо





perl -ne 'print if 1 != $. || /username/'
Проще сделать это с помощью awk:
awk 'NR == 1 && $0 != "username" {next} 1' file
$ awk 'NR>1 || /username/' file
username
Total 0
username
Total 0
username
Total 0
username
Total 0
Команда sed, которую вы дали, должна работать. Можете ли вы проверить с помощью
xxdили аналогичного, содержит ли входной файл некоторые невидимые символы?