Похоже, вы уже нашли ответ с первым dd
. Это просто в другом порядке. Прочтите байты (двухсимвольные шестнадцатеричные последовательности) в обратном порядке. И установите значение пропуска 440 вместо 439.
Это можно сделать с помощью инструмента sed
следующим образом:
sed - e '
s/^[[:blank:]]*//;s/[[:blank:]]*$//
s/"/\\"/g;H;$!d;g
s/\n/","/g;s/.*/"&"/
' input
Когда каждая строка прочитана, обрежьте из нее начальный и конечный пробелы. Экранируйте все двойные кавычки. Добавьте в пространство хранения и, когда будет видна последняя строка, измените все новые строки на разделитель элементов массива.
IFS=$'\n'
array=( $(awk '{print "\"" $0 "\""}' input_file) )
Для каждой строки в input_file
, сверху вниз, команда awk
в подстановке команд выполняет следующие действия:
Однако вместо вывода на стандартный вывод результат выполнения команды awk
используется для замены всей подстановки команды. Замена является результатом подстановки команды.
Затем к результату подстановки команд применяется разбиение слова -. Разделение слова -идентифицирует любую последовательность символов, не включающую символ IFS
, но заканчивающуюся символом IFS
, как отдельное «слово». Следовательно, в данном конкретном случае «словом» является любая строка (из строки input_file
), заключенная в пару двойных кавычек командой awk
.
Поскольку подстановка команды заключена в крайнюю пару круглых скобок ()
, результат awk
помещается между этими скобками, и оболочка обрабатывает круглые скобки целиком, включая все подстановочные токены между (, которые ваши строки размещены стороной -на стороне -, каждая из которых заключена в пару двойных кавычек )в виде массива.
ПРИМЕЧАНИЕ:
IFS
обратно к исходному значению пробела, табуляции и новой строки. sed - e '
s/^[[:blank:]]*//; # trim any leading blanks from the current line read in
s/[[:blank:]]*$//; # trim any trailing blanks from the current line read in
s/"/\\"/g; # escape any double quotes which might exist in the current line read in
H;1h; # append the current line to the hold space, in case of first store as is
$!d; # not yet EOF, drop everything and go back to reading the next line
g; # @ EOF, fetch the hold space: line1\nline2\nline3\n....\nlineEND
s/\n/","/g; # line1","line2","line3","....","lineEND
s/.*/"&"/; # "line1","line2","line3","....","lineEND"
' input