Обновите тар. сжатый файл bz2

У нас есть 100 сотен файлов в сжатом файле trx_date.tar.bz2, в котором есть запрос и ответ. ниже приведена файловая структура trx_date.tar.bz2: trx_date.tar: trx_date содержит: файлы log1, log2, log3, в которых есть запрос xml, содержащий некоторую конфиденциальную информацию, и я хотел бы замаскировать его до некоторого значения по умолчанию. Запрос запроса имеет тег 1234567, и я хочу замаскировать его, т.е. обновить его в файле журнала до 3333333.

Я могу найти его, используя:

Number1=bzcat $LOGDIR/$LOG_FORMAT | grep "<number>[0-2,4-9][0-2,4-9][0-2,4-9][0-2,4-9][0-2,4-9][0-2,4-9][0-2,4-9]"

как мы можем переопределить эти значения в файлах журнала с помощью сценария оболочки?

Файл журнала содержит запрос и ответ. Где у нас есть тег, например 123456, а также другие теги. Я хочу прочитать всю строку файла журнала и заменить этот конкретный тег, как показано ниже 333333, и сохранить информацию в тот же файл. У нас также есть информационный тег с 333333, но я не хочу это учитывать.

Имя тега будем считать его <number>value</number>

Minku Jha 26.01.2019 07:07

Совсем не ясно, пожалуйста, предоставьте более подробную информацию (могут быть образцы ввода и ожидаемого результата) в своем сообщении с кнопкой CODE TAGS {} и сообщите нам об этом.

RavinderSingh13 26.01.2019 07:40

Файл журнала содержит запрос и ответ. Где у нас есть тег типа <info>123456</info>, а также другие теги. Я хочу прочитать всю строку файла журнала и заменить этот конкретный тег, как показано ниже <info>333333</info>, и сохранить информацию в тот же файл. У нас также есть информационный тег с <info>333333</info>, но я не хочу это учитывать.

Minku Jha 26.01.2019 08:10

Примерное количество файлов и объем данных (например, общий размер несжатого архива в гигабайтах, типичный размер файла в мегабайтах) должны учитываться.

Basile Starynkevitch 26.01.2019 08:28

Если мы закроем скрипт и запустим скрипт только для одного файла за раз. Место на диске не будет проблемой

Minku Jha 26.01.2019 08:31

Между прочим, Number1=bzcat $LOGDIR/$LOG_FORMAT не делает того, на что вы надеетесь. Он попытается выполнить $LOGDIR/$LOG_FORMAT как команду, при этом переменная Number1 будет установлена ​​в строку bzcat на время этой попытки выполнения. Вы, вероятно, хотите заменить команду Number1=$(bzcat ...)

tripleee 26.01.2019 09:28

Добро пожаловать в СО. Stack Overflow — это сайт вопросов и ответов для профессиональных программистов и программистов-энтузиастов. Цель состоит в том, чтобы вы добавили свой собственный код к своему вопросу, чтобы показать, по крайней мере, исследовательские усилия, которые вы предприняли, чтобы решить эту проблему самостоятельно.

Cyrus 26.01.2019 11:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
7
413
1

Ответы 1

В принципе, вы не можете делать то, что хотите (без извлечения файла из сжатого архива .tar.bz2), поскольку файл .tar.bz2 представляет собой сжатый bzip2 файл tar архив. Таким образом, единственным хорошим решением было бы извлечь файлы из архива, внести изменения в извлеченные файлы (например, с помощью сед (1) или аук) и воссоздать из них архив. Использовать sed на один конкретный текстовый файл для замены такого шаблона, как <number>[0-9]*</number>, на <number>0000000</number> очень просто. Написать bash for петля для повторения этого в нескольких файлах легко. Поэтому объедините оба подхода или напишите для этого небольшую оболочку или скрипт Python (в файлах извлечен).

На практике (но это рискованно, и я этого не рекомендую) вы можете надеяться, что цифры <number></number> встречаются только в файловой части архива tar, которую вы хотите изменить на месте, и тогда вы, возможно, могли бы заменить (непосредственно в несжатый архив tar), используя, например, сед (1), такие последовательности с другими последовательностями той же длины в байтах (подробнее о формате tar: метаданные, такие как размеры файлов, отображаются в текстовой форме, завершено NUL байт).

Вы также можете рассмотреть возможность использования опоздавший, постпроцессора tar (который вам необходимо установить).

Я настоятельно рекомендую распаковать tar-архив, поработать с извлеченными файлами, а затем снова создать этот архив. Конечно, вам нужно достаточно места на диске, и вы должны его оценить. Но скажите своему менеджеру, что дисковое пространство стоит дешево, как правило, дешевле, чем ваши затраты на рабочую силу.

PS. Команда, данная в вашем вопросе, действительно неверна и не делает то, о чем вы мечтаете. Узнайте больше о перенаправление, трубопроводы, округление, unix-оболочки. Внимательно прочитайте документация Bash (особенно основные функции оболочки, расширение оболочки, подстановка команды). Читать также документация каждой команды, которую вы хотите использовать, например. смола(1), грэп(1), сед (1) и т. д.). Прочитайте соответствующий man-страницы(7), возможно, с помощью команды человек(1).

У нас есть около 200+ файлов, и каждый файл имеет размер около 25 МБ в заархивированном виде. Я полагаю, что это создаст проблему с дисковым пространством на сервере. В любом случае, я не вижу другого пути. Я могу попробовать файл за файлом. Можете ли вы помочь с ниже. Давайте рассмотрим, что файл был записан в несжатый файл и сохранен в переменной. Теперь я перебираю файл построчно, и однажды мы получили <info>123456</info> . Я хочу заменить его на <info>333333</info> и сохранить в тот же файл

Minku Jha 26.01.2019 08:18

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

Basile Starynkevitch 26.01.2019 08:21

Обновил мой предыдущий комментарий. Я могу избежать проблем с дисковым пространством другим способом.

Minku Jha 26.01.2019 08:23

Это ваша (и вашего менеджера, и вашей организации) проблема. Тем не менее, рассмотрите стоимость рабочей силы и стоимость дискового пространства. Мои ежедневные трудозатраты больше, чем стоимость терабайта диска. Тебе так мало платят? стоимость места на диске? Вам следует оценить необходимое дисковое пространство и уточнить его стоимость у вашего менеджера.

Basile Starynkevitch 26.01.2019 08:24

В соответствии с вашими предложениями ?

Minku Jha 26.01.2019 08:33

Другие вопросы по теме