Надеюсь, я правильно понимаю. Этот сценарий удалит все из строки, начиная со второго *
до конца буфера, создав желаемый результат из примера:
sed -n 'H;1h;$x;$s/\(\*[^*]*\)\n\*.*$/\1/p'
Пояснение добавить все строки ( H
) в буфер удержания. Для удержания последнего обмена строкой и буфера шаблонов ( $ x
), поэтому у вас есть весь файл как один шаблон. В этом шаблоне сохраняемая часть устанавливается в \ (\)
и сохраняется ( \ 1
), в то время как все, начиная с новой строки с *
, удаляется.
Это соответствует вашему описанию, но если это не подходит для всех возможных примеров, вы можете изменить сценарий.
Не знаю, поможет ли это вам, но вы можете переписать свой код как здесь:
#!/bin/bash -l
#$ -S /bin/bash
#$ -N $1
rm -rf ~/.minecraft
cp -rn /media/$1/MC/minecraft ~/
mv /home/$1/minecraft /home/$1/.minecraft
java -jar Minecraft.jar
и указать пользователя в аргументе: sh this_script.sh user
будет использовать путь /media/user
.
Если вам нужен текущий пользователь, используйте:
sh this_script.sh `whoami`
Возможно, вы можете добавить sudo
перед командами, если вам это нужно.
Если все системы, которые вы используете, используют BASH (как указано в вашем операторе hashbang в вашем скрипте), вы можете отредактировать третью строку, чтобы использовать переменную среды EUID:
sudo cp -rn /media/${EUID}/MC/minecraft ~/
$EUID будет верните свой эффективный идентификатор пользователя. Он работает с sudo, что означает, что он знает разницу между командой с эскалацией sudo и командой без эскалации.
Следующее просто демонстрирует, как он реагирует на вызовы от меня, от меня с помощью sudo и от root
[sheepd0g@sys42 ~]$ echo $EUID
17388
[sheepd0g@sys42 ~]$ sudo echo $EUID
17388
[sheepd0g@sys42 ~]$ su -c 'echo $EUID'
0