Заменить «& #x2» на «0x02» во всем файле с помощью sed

Надеюсь, цикл forне нужен. попробуй это,

DIRECTORY_PATH=/path/to/dir
FILE_LIST=(`ls -p $DIRECTORY_PATH | grep -v / `)
printf '%s\n' "${FILE_LIST[@]}" | nl -v 1
read -r -p "please enter index number to open: " fileNO
cat $DIRECTORY_PATH/${FILE_LIST[$fileNO]}
  • FILE_LISTсписок только файлов в данном каталоге
  • printfчтобы перечислить массив файлов один за другим
  • nlномер каждой строки
  • readдля получения ввода во время выполнения
  • наконец, catфайл, индексируя массив
0
18.03.2021, 12:58
1 ответ

В строке &#x2нет специальных символов, которые необходимо экранировать, чтобы строка интерпретировалась буквально в части шаблона команды s///в sed.

Кроме того, в замещающей строке нет специальных символов 0x02, которые необходимо обрабатывать особым образом(&были бы специальными при замене, как и \1, \2и т. д. и \n, \tи т. д., если вы используете GNUsed).

Это означает, что вы должны уметь просто

sed 's/&#x2/0x02/g' inputfile >outputfile

Единственное, что может потребовать особого внимания, это избегать замены &#x2в таких подстроках, как &#x23. Поскольку я не вижу в вопросе ни одного примера документа, я не могу точно сказать, будет ли это проблемой и как лучше всего защититься от нее.

Как правило, не используйте параметр -iс sed, пока у вас не будет sedвыражения редактирования или сценария, который, как вы знаете, работает, во избежание случайной потери данных. Вам также не нужно -Eздесь, так как мы вообще не имеем дело с расширенными регулярными выражениями.

Если вы используете команду sedдля файла, имя которого хранится в переменной,не забудьте заключить расширение этой переменной в двойные кавычки (см. Почему мой сценарий оболочки забивается пробелами или другими специальными символами?).

1
18.03.2021, 22:25

Теги

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