Как я заменяю последнее вхождение символа в строке с помощью sed?

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

Попытайтесь выполнить команду ls -lH "$(which touch)" в терминале; является первым, выполняют бит x или s? Если это s (например, -rwsr-xr-x), затем мое инстинктивное чувство состояло бы в том, что Вы смотрите на внедренную установку. Обратите внимание, что, если Ваша система была поставлена под угрозу, Вы не можете обязательно доверять выводу ls (или в этом отношении любой другой инструмент), чтобы быть точным представлением действительности. $(which touch) расширится до того, что думает Ваша оболочка, полный путь к touch двоичный файл, таким образом, это поймает случай случайного touch в неправильном месте, которое, оказывается, прибывает перед реальным в Ваш $PATH, и -H делает ls разыменуйте символьные ссылки (в случае символьных ссылок, это покажет название символьной ссылки, но свойства файла будут от цели символьной ссылки).

Если это не это от звуков его, Ваша система очень серьезно повреждается мудрая полномочиями.

Также помните это vim на самом деле не создает файл, пока Вы не даете команду сохранения.

Если Ваша система действительно была поставлена под угрозу, единственное действительное решение состоит в том, чтобы вытереть ее, чистят и восстанавливают, то тщательно восстанавливают данные и конфигурацию от резервных копий. (У Вас действительно есть резервные копии, правильно?) В принципе, конечно, технически возможно восстановить внедренную систему, но это имеет тенденцию быть намного большей проблемой, чем это стоит, чрезвычайно легко пропустить что-то, и это, конечно, не легче, чем переустановка. То, что это включило бы, должно загрузиться от доверяемых, медиа только для чтения, смонтировать существующие разделы в их обычных местах под некоторым альтернативным корнем, таких как/mnt и пройти каждый каталог, файл, бит полномочий, и т.д. и т.д., с частым гребнем, ища любые аномалии и восстановив что-либо даже удаленно выглядящее подозрительно из доверяемой копии. Для этого Вам эффективно нужна тождественно настроенная достоверная система для сравнения с; Вы ничему не можете доверять на скомпрометированном узле сети.

31
01.04.2018, 06:21
3 ответа

Вы можете сделать это с помощью одного sed :

sed 's/\(.*\)-/\1 /'

или, используя расширенное регулярное выражение:

sed -r 's/(.*)-/\1 /'

Дело в том, что sed очень жадный, поэтому соответствует как можно большему количеству символов до - , включая другие - .

$ echo 'swp-RedHat-Linux-OS-5.5.0.0-03' | sed 's/\(.*\)-/\1 /'
swp-RedHat-Linux-OS-5.5.0.0 03
48
27.01.2020, 19:37

Что-то вроде этого работало для меня, хотя я уверен, что есть лучшие пути

echo "swp-RedHat-Linux-OS-5.5.0.0-03" | rev | sed 's/-/ /' | rev
swp-RedHat-Linux-OS-5.5.0.0 03
11
27.01.2020, 19:37

Вы также можете справиться с этим с расширением параметра Bash :

s=swp-RedHat-Linux-OS-5.5.0.0-03
echo ${s%-*} ${s##*-}

Вывод:

swp-RedHat-Linux-OS-5.5.0.0 03
27
27.01.2020, 19:37

Теги

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