Команда wc
иначе. подсчет слов может сделать это:
$ wc -w <file>
$ cat sample.txt
today is a
good day
$ wc -w sample.txt
5 sample.txt
# just the number (thanks to Stephane Chazelas' comment)
$ wc -w < sample.txt
5
Это вопрос указания размера блока, количества и пропуска:
$ cat hello.txt
hello doge world
$ { dd bs=1 count=2 ; dd skip=3 bs=1 count=1 ; dd skip=6 bs=1 ; } <hello.txt 2>/dev/null
he orld
Вышеупомянутое использует три вызова dd
. Первый получает первые два символа он
. Второй пропускает до конца hello
и копирует следующий за ним пробел. Третий переходит к последнему слову world
, копируя все, кроме первого символа.
Это было сделано с помощью GNU dd
, но BSD dd
похоже, что он тоже должен работать.
Так как вы не хотите экономить место, решение кажется более простым:
Думаю, это возможно с помощью dd
, но это похоже на использование танка, чтобы убить муху. Почему бы не
$ printf "%s %s\n" $(head -c 2 hello.txt) $(tail -c 5 hello.txt )
he orld
Параметр -c
означает (для head
):
-c, --bytes=[-]K
print the first K bytes of each file; with the leading '-',
print all but the last K bytes of each file
и для tail
:
-c, --bytes=K
output the last K bytes; alternatively, use -c +K to output
bytes starting with the Kth of each file
В общем, чтобы удалить байт диапазон n до x включительно, вы должны запустить
( head -c n-1; head -c -x-1) )
Например, чтобы удалить байты с 4-го по 12-й:
$ (head -c 3 hello.txt; tail -c +11 hello.txt )
hel world