Я пытаюсь заставить утилиту head
отображать все, кроме последней строки стандартного ввода. Фактический код, который мне нужен, - это что-то вроде строки cat myfile.txt | head -n $(($(wc -l)-1))
. Но это не сработало. Я делаю это на Darwin/OS X, у которого нет хорошей семантики head -n -1
, которая бы получила мне подобный вывод.
Ни один из этих вариантов не работает.
cat myfile.txt | head -n $(wc -l | sed -E -e 's/\s//g')
echo "hello" | head -n $(wc -l | sed -E -e 's/\s//g')
Я тестировал больше вариантов и, в частности, нашел, что это работает:
cat <<EOF | echo $(($(wc -l)-1))
>Hola
>Raul
>Como Esta
>Bueno?
>EOF
3
Здесь работает нечто более простое.
echo "hello world" | echo $(($(wc -w)+10))
Это понятно, что я ошибочно ошибаюсь. Но это, по крайней мере, говорит мне, что программа head
не потребляет стандартный ввод, прежде чем передавать материал на подзаголовок/подменю команды, удаленная возможность, но та, которую я хотел все равно исключить.
echo "hello" | head -n $(cat && echo 1)
Что объясняет поведение head
и wc
и их взаимодействие через подоболочки здесь? Благодарим за помощь.