Использование sed для замены символа перед другим символом в строке

Непроверенный псевдокод:

i=1
for d in *
do
  echo "$d"
  echo Enter Y to rename the above directory:
  read answer
  if [ $answer = "Y" ]
  then
    mv "$d" tempdir${i}
    i=$((i+1))
  fi
done
-2
24.03.2019, 08:37
2 ответа

Пример sed, который будет так

sed  's/^\([0-9]*\) [0-9]*  *\(\*  *\* *\*  *\/opt\/tin\/toss.*\)$/\1 * \2/'

это \([0-9]*\)будет соответствовать первой цифре и сохранит значение в\1

это \(\* *\* *\* *\/opt\/tin\/toss.*\)будет соответствовать последним 3 звездам в командной строке и сохранит значение в\1

-1
28.01.2020, 05:18
sed '/\/opt\/tin\/toss/ s/^\([^ ]* \+\)[^ ]*\(.*\)$/\1*\2/'

Вы бы прочитали это так:

Там, где есть /opt/tin/toss, замените шаблон, соответствующий

^начало строки, за которым следует

\([^ ]* \+\)

первая группа \(из [^ ]*любое количество символов до одного или нескольких пробелов \+и закрытие группы\)

[^ ]*

за которым следует [^ ]*что угодно до пробела

\(.*\)

за которым следует вторая группа \(.*\)$совпадающий пробел, за которым следует что угодно до конца

с

/\1*\2/

первая группа, затем *и вторая группа.

0
28.01.2020, 05:18

Теги

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