Сделайте это в два шага: сначала удалите префикс (в случае, если терминатор присутствовал в префиксе), затем удалите все после префикса. Используйте команду T
, чтобы пропустить строку, если она не совпадает:
echo "This is a test some stuff I want string junk string end" |
sed -n 's/.*\(.te.*ng\)/\1/; T; s/\(ng\).*/\1/p'
Можно также сначала удалить не совпадающие строки, а затем выполнить замену на досуге.
echo "This is a test some stuff I want string junk string end" |
sed '/.*\(.te.*ng\)/!d; s/.*\(.te.*ng\)/\1/; s/\(ng\).*/\1/'
В качестве альтернативы выполните замену и окончательную печать только на совпадающих строках.
echo "This is a test some stuff I want string junk string end" |
sed '/.*\(.te.*ng\)/ { s/.*\(.te.*ng\)/\1/; s/\(ng\).*/\1/p; }'
Проблема заключается в /
в начале команды. Позвольте мне попытаться объяснить.
Символ /
в начале пути к файлу означает от корня системы.
Например:
cd /Desktop_Launchables
Эта команда ищет каталог Desktop_Launchables
в корне /
. В системе Windows это была бы аналогичная команда:
cd C:\Desktop_Launchables
С другой стороны, вы можете использовать ~
для ярлыка пути к каталогу home
из любого места файловой системы.
Например, если Desktop_Launchables
находится в домашнем каталоге пользователя.
cd ~/Desktop_Launchables
И вы можете расширить ~
, если Desktop_Launchables
находится в домашнем каталоге другого пользователя. Например, в доме пользователя root
(и у вас есть разрешение на доступ к нему).
cd ~root/Desktop_Launchables
Расширенная, не сокращенная версия этого была бы (скорее всего):
cd /home/<user>/Desktop_Launchables
Где
- ваш логин.
Я думаю, что вы действительно хотели:
cd Desktop_Launchables
или
cd Desktop/Desktop_Launchables
Но чтобы подстраховаться, вы всегда можете поставить ~
впереди, например:
cd ~/Desktop_Launchables
или
cd ~/Desktop/Desktop_Launchables