Ответ: НЕТ . Извините, что разочаровал вас, но Linux работает по принципу , где что-то пропало, а затем просто исчезло
. По этой причине даже rm
не выбрасывает файлы в корзину. Для решения подобных проблем разрабатывается альтернативная файловая система copyfs .
Другой способ - использовать любую систему контроля версий (например, git
), чтобы вы могли получить любые предыдущие версии ваших файлов.
Поскольку я не уверен, что вы хотите сделать, я ограничу свой ответ исправлением команды. Должно быть:
эхо "123|456|789" | sed's/^ (. | )(. | ). *$/\1/'
(обратите внимание на / непосредственно перед последней кавычкой ).
Это дает результат:
123|
Вы этого хотели?
echo '123|456|789' | sed 's/|.*//'
echo '123|456|789' | sed 's/^[0-9]*|//;s/|.*//'
echo '123|456|789' | sed 's/.*|//'
echo '123|456|789' | sed 's/|/ /g'
Или, если вам не жалко использоватьsed
echo '123|456|789' | cut -f1 -d\|
echo '123|456|789' | cut -f2 -d\|
echo '123|456|789' | cut -f3 -d\|
echo '123|456|789' | cut -f1,2,3 --output-delimiter=" " -d\|
Мой предыдущий ответ только что исправил ошибку. Вот как бы я ее решил:
Сценарий 4 самый сложный, поэтому вот решение:
echo '123|456|789' | sed 's/\([0-9]*\)|\([0-9]*\)|\([0-9]*\)/\1 \2 \3/'
\1, \2 и \3 в конце выбирают часть, совпадающую между «украшенными скобками» (\ (и \)). На каждый набор из них ссылается следующий номер, поэтому \1 для первого и т. д.
Для сценариев 1, 2 и 3 вы можете упростить это, но проще просто вырезать и вставить, а затем просто поставить \1, \2 или \3, как требуется, между последним набором //. Не помешает оставить там и остальные декорированные скобки.
Это решение может быть расширено до любого количества полей, хотя я, вероятно, предпочел бы использовать cut, если это возможно.
С помощью GNU sed вы можете захватить свои поля, указав их количество в переменной оболочки$n
n=2; # to get field number 2
echo "123|456|789" | sed -n "s/|/\n/$n;s/^[^\n]*|//;P"
, а для сценария -4 равно:
echo... | sed -e 'y/|/ /'