У меня была такая же проблема, и я решил ее, пытаясь решить это, поэтому я опубликую здесь свое решение (что довольно плохо).
Я использую wmctrl (вместо этого вы можете использовать xprop) и xdotool для этого. Раньше я использовал расширение, чтобы сделать URL-адрес видимым в строке заголовка (затем вы можете получить доступ к URL-адресу через xprop или wmctrl). Оба метода работают довольно хорошо, хотя и не совсем «чистые».
id=$(wmctrl -l | grep -oP "(?<=)(0x\w+)(?=.*Chromium)") //Put here the regex for the browser you use
xdotool key --window $id "ctrl+l"
xdotool key --window $id "ctrl+c"
Теперь у вас есть URL-адрес в буфере обмена. Затем я использую xclip для работы с URL-адресом.
Я хотел бы увидеть реальное решение этой проблемы, если кто-нибудь его найдет.
Вот как я бы это сделал:
sed -E '/(nas_mba|nas_tvr)/! s/nas_.../nas_bar/'
Пример:
echo "nas_mba
nas_tvr
nas_foo" | sed -E '/(nas_mba|nas_tvr)/! s/nas_.../nas_bar/'
nas_mba
nas_tvr
nas_bar
Только nas_foo
в исходном тексте заменяется, а оба nas_mba
и nas_tvr
остаются нетронутыми.
Другой пример с большим количеством строк:
echo "nas_hat
> nas_mba
> nas_foo
> nas_hat
> nat_tvr
> nas_cat
> nas_dog" | sed -E '/(nas_mba|nas_tvr)/! s/nas_.../nas_bar/'
nas_bar
nas_mba
nas_bar
nas_bar
nat_tvr
nas_bar
nas_bar
Если вы хотите изменить место, просто добавьте параметр -i
(если вы используете GNU sed
, вам не нужно -i ""
достаточно просто -i
):
sed -E -i "" '/(nas_mba|nas_tvr)/! s/nas_.../nas_bar/' nas.txt
cat nas.txt
nas_bar
nas_mba
nas_bar
nas_bar
nat_tvr
nas_bar
nas_bar
Протестировано в Mac OS X 10.11.6 и BSD sed
.
Если perl является вариантом, вы можете использовать опережающий просмотр :
export SCL
perl -pe 's/nas_(?!mba|tvr)\w*/nas_$ENV{SCL}/g' file
(обратите внимание, что здесь предполагается, что последовательности, которые вы действительно хотите сопоставить, состоят из словесных символов - это может быть изменено, если это не так).