chroot: failed to run command ‘ls’: No such file or directory
Чтобы выполнить любую команду внутри chroot, вам нужно, чтобы эта программа была доступна в chroot (поскольку она не может использовать программу, установленную в /
файловой системы.
Самый простой способ — скопируйте /usr/bin/ls
из в /home/kuba/projects/jcubic/leash/usr/bin/
(вам также понадобятся зависимые общие библиотеки: ldd /usr/bin/ls
).
это удалит все до -тире в каждой 2 й строке:
sed '0~2s/.*-//' infile
если вы имеете в виду удаление во вторых строках из строк, следующих после строки 12345.ABC9998
, тогда вы должны сделать:
sed '/^12345.ABC9998$/{n; s/.*-//}' infile
если вы имеете в виду удаление во вторых строках, следующих за строкой, содержащей 12345.ABC9998
строк, вы должны сделать:
sed '/12345.ABC9998/{n; s/.*-//}' infile
Если вы хотите воздействовать только на строки, которые содержат тире (в вашем примере, это похоже на случай ), тогда это должно работать:
sed 's/^.*-//' file.txt
Он удалит все до тире в начале каждой строки включительно. Кроме этого,в строках без тире регулярное выражение не будет совпадать, поэтому оно не будет выполнять никаких замен и оставит строку как есть.
Если вы хотите применить преобразование только к каждой второй строке, вы можете использовать команду sed
n
(для «следующей» ), чтобы пропустить строку, по-прежнему отправляя ее на выход.
Это предполагает, что вы действительно хотите воздействовать на четные строки (в вашем примере, между блоками есть пустые строки, я предполагаю, что это артефакт копирования и вставки, а заголовок вашего вопроса «альтернативные строки» на самом деле то, что вы хотите.)
Эта команда применит регулярное выражение только к четным строкам:
sed 'n;s/^[^A-Z]*//' file.txt
В качестве альтернативы можно приказать ему удалить все до прописных букв для каждой второй строки. Таким образом, все, что находится перед тире, и сами тире могут быть соответственно удалены.
sed -i '0~2s/[^A-Z]*//' file