Как выбрать строку записи из файла с помощью SED

Вероятно, это лучший способ сделать это, но я придумал это решение, которое преобразует число в десятичное, а затем обратно в шестнадцатеричное (и вручную добавляет0x):

printf '0x%x\n' "$((16#00080000))"

Что можно записать как:

printf '0x%x\n' "$((16#$(expr substr "$SUPERBLOCK" 64 8)))"
0
01.07.2020, 18:32
2 ответа

Если подход с двумя -этапами подходит, вы можете сначала использовать grepдля извлечения всех строк с недопустимыми символами в файл, а затем использовать команду sedдля фактической замены.

Обратите внимание, что, поскольку вы намерены избавиться от специальных (, то есть «не -печатаемых» символов ), вы можете попробовать использовать класс символов POSIX [:print:]вместо перечисления символов, если ваш grep/ sedпонимает это.

Итак, вы могли бы сначала использовать

grep '[^[:print:]]' uploadfile.txt > invalid_lines.txt

, чтобы извлечь все строки с недопустимыми символами для целей архивирования, а затем выполнить

sed -e 's/[^[:print:]]/ /g' uploadfile.txt > outputfile.txt

или, если вы абсолютно уверены, выполните редактирование места -с помощью

sed -i -e 's/[^[:print:]]/ /g' uploadfile.txt

, чтобы удалить их из файла.

0
18.03.2021, 23:22

Из sed docs("выбор строк путем сопоставления текста" )вы можете точно так же выбирать строки:

# First, report lines
sed -n '/[^a-zA-Z0-9&,-]/p' uploadfile.txt > reportfile.txt

# Then, correct and output text
sed -e 's/[^a-zA-Z0-9&,-]/ /g' uploadfile.txt > outputfile.txt

где опция -nне выведет ничего, кроме того, что напечатано командой 'p', то есть целые строки, выбранные вашим самым регулярным выражением.

0
18.03.2021, 23:22

Теги

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