
Ich habe ein Skript, das eine Variable setzt. Normalerweise ist es eine URL, die aus einer HTML-Datei kopiert wurde, und dann wird diese Variable verwendet.
Ich nehme den kopierten Text/Zwischenablageinhalt xclip -out
und lege ihn als Variable fest – sagen wir $CLIP
. Die kopierte URL kann jedoch manchmal unerwünschte Zeichen enthalten, wie ",',`
usw. Ich möchte, dass das Skript alle diese durch Leerzeichen ersetzt.
Antwort1
die kopierte URL kann manchmal unerwünschte Zeichen enthalten, wie
",',`
usw. Ich möchte, dass das Skript alle diese durch Leerzeichen ersetzt.
Sie könnten sed
hierfür verwenden.
Wenn Ihre $url
Variable ungefähr so aussieht:
echo $url
http://1f,oo"2b`a'r.com
Dadurch sed
werden alle „unerwünschten“ Zeichen durch Leerzeichen ersetzt:
echo $url | sed 's/[^a-zA-Z0-9:/\.]/ /g'
http://1f oo 2b a r.com
Antwort2
viele Möglichkeiten, dies zu tun
Verwenden Sie die richtigen Hex-Codes für Ihren eigenen Fall
clean_url="$(echo ${dirty_url} | sed 's/[\x20-\x2D]/ /g')"
dann würde ich es durchgehen, um zu prüfen, ob Sie mehrere Leerzeichen haben und diese mit etwas wie
clean_url=$(sed 's/ */ /g' <<< ${clean_url})
Antwort3
Du könntest benutzenBash-Parametererweiterungnach der Aktivierungerweitertes Globbing
CLIP=$'http://abc\".x\'y`.com'
printf '%s\n' "$CLIP"
http://abc".x'y`.com
chars_to_remove=("'" '"' '`') #set characters to remove into an array
chars_to_remove=$(IFS='|'; printf '+(%s)' "${chars_to_remove[*]}") #assemble in extglob format
printf '%s\n' $chars_to_remove
+('|"|`)
printf '%s\n' "${CLIP//${chars_to_remove}/ }"
http://abc .x y .com
Antwort4
Vereinfachte Bash-Parametererweiterung:
root@debian:# CLIP=$'http://abc\".x\'y`.com';cleanclip=$(echo ${CLIP//[\'\`\"]});echo $cleanclip
#Output:
http://abc.xy.com
PS: Das zu entfernende Muster befindet sich innerhalb von [] und Zeichen werden maskiert.
SehenBash-Handbuch, Abs. 3.5.3um${Parameter/Muster/Zeichenfolge}