С помощью sed
, если в 5-ом поле есть только один _
, подлежащий замене
$ sed -E 's/^(([^|]+\|){4}[^_]+)_/\1|/' ip.txt
rat|minty|ruhul|balaji|rat|123|decode|rat_123|abc|def|ghi|jkl|rat|cde|ind|rat
rat|minty|ruhul|balaji|rat1|123|decode|rat_123|abc|def|ghi|jkl|rat|cde|ind|rat
rat|minty|ruhul|balaji|rat2|123|decode|rat_123|abc|def|ghi|jkl|rat|cde|ind|rat
Решение с помощью perl
(аналогично awk
), если нужно заменить все _
в 5-ом поле:
$ perl -F'\|' -lane '$F[4] =~ tr/_/|/; print join "|",@F' ip.txt
rat|minty|ruhul|balaji|rat|123|decode|rat_123|abc|def|ghi|jkl|rat|cde|ind|rat
rat|minty|ruhul|balaji|rat1|123|decode|rat_123|abc|def|ghi|jkl|rat|cde|ind|rat
rat|minty|ruhul|balaji|rat2|123|decode|rat_123|abc|def|ghi|jkl|rat|cde|ind|rat
Попробуйте установить пакет tar (apk добавить tar). Busybox tar (по умолчанию) поддерживает не все функции.
tar:invalid magic означает, что файл поврежден.
Пожалуйста, проверьте md5sum, если она совпадает... вот что я получил:
md5sum sqlite-autoconf-3090100.tar.gz
74931054399a2d7acf35637efe8d6f45 sqlite-autoconf-3090100.tar.gz
Это не обязательно означает, что версия Alpine tar
несовместима, поскольку Франческо указал, что вам действительно следует проверять контрольные суммы файлов.
Я столкнулся с этим при выполнении curl https://github.com/someproject/releases/project-1.1.0.gz | tar -xvzf
в моем Dockerfile.
Оказывается, я забыл, что curl
будет следовать перенаправлениям только в том случае, если вы разрешите это с помощью -L
, и поэтому он никогда не попадал в настоящий файл, он буквально загружал html, сообщая ему, что есть перенаправить. Добавление -L
позволило мне сохранить файл, не раздувая мой контейнер новымtar
(помимо «раздувания», добавленногоcurl
).
Я столкнулся с той же проблемой и решил ее, однако я не уверен, что вы столкнулись с той же проблемой.
Код, который вызвал ошибку:
wget www.example.com/file.tar.gz
tar -zxvf file.tar.gz
Код, который разрешил это:
wget https://www.example.com/file.tar.gz
tar -zxvf file.tar.gz
Обратите внимание, что я забыл «https ://», где файл загружался, но tar выдавал ту же ошибку. Если файл не найден, убедитесь, что вы используете
docker build --no-cache...
если вы используете alpine в докере, подтвердите, что вы используете COPY
вместо ADD
в вашем файле-контейнере (Dockerfile
), так как ADD
будет распаковываться при построении слоя
alpine default tar не дает подсказку
tar (child): sqlite-autoconf-3090100.tar.gz: Cannot read: Is a directory
tar (child): At beginning of tape, quitting now
tar (child): Error is not recoverable: exiting now