Использование SED для получения значений из String

Ответ: НЕТ . Извините, что разочаровал вас, но Linux работает по принципу , где что-то пропало, а затем просто исчезло . По этой причине даже rm не выбрасывает файлы в корзину. Для решения подобных проблем разрабатывается альтернативная файловая система copyfs .

Другой способ - использовать любую систему контроля версий (например, git ), чтобы вы могли получить любые предыдущие версии ваших файлов.

2
15.12.2018, 23:52
4 ответа

Поскольку я не уверен, что вы хотите сделать, я ограничу свой ответ исправлением команды. Должно быть:

эхо "123|456|789" | sed's/^ (. | )(. | ). *$/\1/'

(обратите внимание на / непосредственно перед последней кавычкой ).

Это дает результат:

123|

Вы этого хотели?

1
27.01.2020, 22:09
  1. echo '123|456|789' | sed 's/|.*//'
  2. echo '123|456|789' | sed 's/^[0-9]*|//;s/|.*//'
  3. echo '123|456|789' | sed 's/.*|//'
  4. echo '123|456|789' | sed 's/|/ /g'

Или, если вам не жалко использоватьsed

  1. echo '123|456|789' | cut -f1 -d\|
  2. echo '123|456|789' | cut -f2 -d\|
  3. echo '123|456|789' | cut -f3 -d\|
  4. echo '123|456|789' | cut -f1,2,3 --output-delimiter=" " -d\|
1
27.01.2020, 22:09

Мой предыдущий ответ только что исправил ошибку. Вот как бы я ее решил:

Сценарий 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, если это возможно.

0
27.01.2020, 22:09

С помощью 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/|/ /'
0
27.01.2020, 22:09

Теги

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