Удалите начальные байты из файла, затем запишите оставшиеся байты в otput - PullRequest
0 голосов
/ 06 ноября 2019

Мне нужно найти первую подстроку в (текстовом) файле, удалить / вырезать начальные байты, записать оставшиеся байты в новый файл. Я пробовал SED, AWK, CUT, но потерял не очень хорошие результаты. Звучит очень просто. Это должно работать в сценарии .sh cmdline.

Входной файл может содержать новые строки или все находится в одной строке, поэтому для поиска маркера <?xml должен работать символьный или байтовый уровень. Старшие байты являются случайными и любой длины.

Входной файл: something I want to drop<?xml............to the end of file</root>

Выходной файл: <?xml............to the end of file</root>

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

sed -n '/.*<?xml/,${s//<?xml/;p}' file

От строки xml до конечной строки ($), ведение полосы, затем печать.

  • -n не печатает, если pговорит ему напечатать буфер шаблонов.
  • Пустой // в замене будет соответствовать предыдущей строке соответствия, в данном случае /.*<?xml/
1 голос
/ 06 ноября 2019

С perl

perl -0777 -pe 's/.*?(?=<\?xml)//s' ip.txt

-0777 приведет к тому, что весь файл будет прочитан как одна строка. Флаг s позволит . соответствовать символу новой строки. (?=<\?xml) будет ожидать совпадения с <\xml и, следовательно, все символы, встречающиеся до удаления этой строки.

Чтобы сохранить изменения на месте, используйте perl -0777 -i -pe

...