dd удаляют диапазон байтов

Команда 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
5
12.05.2014, 00:48
4 ответа

Это вопрос указания размера блока, количества и пропуска:

$ 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 похоже, что он тоже должен работать.

5
27.01.2020, 20:33
[12185] Марк прав[12186]
3
27.01.2020, 20:33
[1120136]Perl [1120711]pack[1120712] и [1120713]распаковка[1120714] функции goot при работе с строкой фиксированной ширины. Если вы хотите использовать [1120715]Perl[1120716], попробуйте следующее:
  • Объяснение
  • Мы разделим строку на три части, [1121370]$head[1121371] - это начало строки до первого удаляемого байта, [1121372]$skip[1121373] - это диапазон байтов, который мы хотим удалить, [1121374]$tail[1121375] - это остальная часть строки. Распаковка
  • шаблона [1121377] [1121378] "A2 A5 A*" [1121379] разделит строку на три части, как описано выше.
  • С помощью [1121380]$skip[1121381] мы получим любые пробелы в ней, сохраним их в [1121382]$space[1121383].
  • Распечатайте конкатенцию из трех частей, чтобы получить желаемый результат.
  • Обновлено
  • Так как вы не хотите экономить место, решение кажется более простым:

    • С помощью обновленной строки:
    • x10[1120730] в шаблоне [1120731]распаковать[1120732], что означает пропустить 10 байт в строке.[1120149].
    0
    27.01.2020, 20:33

    Думаю, это возможно с помощью 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
    
    4
    27.01.2020, 20:33

    Теги

    Похожие вопросы