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

#!/bin/bash  
# Workspace desktop image/directory switcher  
# Script to change the desktop image and icons when switching workspaces  
# Tested on Linux Mint 19 Tara 'cinnamon'  
# Amended script of person or persons unknown based on the script by garolou from:  
# https://forums.linuxmint.com/viewtopic.php?t=118540#p672189  
# Sometimes icons did not appear on desktop so I added the line after do"  
# to correct this   
# Before using you must add more desktops to /home/username/  
# Desktop0 Desktop1 etc  
# Do not delete Desktop folder  
# Icons may be copied to other desktops from Desktop   
# May be added to startup applications by using path  
# /bin/bash -c "sleep 10&&/home/a/Desktops"  
# Edit paths according to your username.  
# I call this Desktops but of course you don't need to use this name  

desktop_dir="/home/a/.cinnamon/backgrounds/" # full path to images directory;  
desktop_img=(1.jpg 2.jpg 3.jpg 4.jpg 5.jpg) # add more images if using more workspaces less images required if using less workspaces  

setdesktop() {  
gsettings set org.gnome.desktop.background picture-uri "file://$desktop_dir$1"

}
xprop -root -spy _NET _CURRENT _DESKTOP |
при чтении -r; делать
gsettings установить org.nemo.desktop показать -рабочий стол -значки false
desk="${REPLY:-1}" #получить номер рабочей области
setdesktop "${desktop _img[$desk]}" #установить изображение рабочего стола
gsettings установить org.nemo.desktop показать -рабочий стол -значки false
sed -i '/\ (^XDG _DESKTOP _DIR="$HOME/Desktop )[^"] *"/s//\1'"$desk"' "/" ~/.config/user -dirs.dirs #change XDG _DESKTOP _DIR
gsettings set org.nemo.desktop показать -рабочий стол -значки true #показать значки
сделано

0
17.07.2020, 08:35
2 ответа

Вот так:

sed -i "s@'/loft-run'\+@@" warmblanket.js
  • основная форма заменыs/before/after/
  • используйте двойные кавычки , если вы хотите обрабатывать одинарные кавычки
  • здесь выбран разделитель @вместо базового /, вы можете подобрать большую часть таблицы ASCII
0
18.03.2021, 23:19

sed не знает о литеральных строках, только регулярные выражения и обратные ссылки -разрешают текст. Чтобы делать что-либо с литеральными строками, просто используйте инструмент, который их понимает, например, awk:

$ cat file
window.location = '/loft-run'+ResourceManager.hotlegs + mainPage + ".html#" + newhash;

$ awk \
    -v old="window.location = '/loft-run'+ResourceManager.hotlegs + mainPage + \".html#\" + newhash;" \
    -v new='window.location = ResourceManager.hotlegs + mainPage + ".html#" + newhash;' \
    's=index($0,old) { $0=substr($0,1,s-1) new substr($0,s+length(old)) } 1' file
window.location = ResourceManager.hotlegs + mainPage + ".html#" + newhash;

Обратите внимание на использование "вместо 'вокруг строки old=..., потому что эта строка включает 's, а оболочка не допускает 'внутри строки с разделителем '-.

0
18.03.2021, 23:19

Теги

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