![从变量中删除不需要的字符的脚本](https://linux22.com/image/101153/%E4%BB%8E%E5%8F%98%E9%87%8F%E4%B8%AD%E5%88%A0%E9%99%A4%E4%B8%8D%E9%9C%80%E8%A6%81%E7%9A%84%E5%AD%97%E7%AC%A6%E7%9A%84%E8%84%9A%E6%9C%AC.png)
我有一个设置变量的脚本。它通常是从 HTML 文件复制的 URL,然后使用该变量。
我使用复制的文本/剪贴板内容xclip -out
并将其设置为变量 - 比方说$CLIP
。但是,复制的 URL 有时可能包含不需要的字符,例如",',`
等。我希望脚本将所有这些字符替换为空格。
答案1
复制的 URL 有时可能包含不需要的字符,例如
",',`
等。我希望脚本将所有这些字符替换为空格。
你可以用sed
这个。
如果你的$url
变量看起来像这样:
echo $url
http://1f,oo"2b`a'r.com
这sed
会将所有“不需要的”字符替换为空格:
echo $url | sed 's/[^a-zA-Z0-9:/\.]/ /g'
http://1f oo 2b a r.com
答案2
有很多方法可以做到这一点
根据您自己的情况使用正确的十六进制代码
clean_url="$(echo ${dirty_url} | sed 's/[\x20-\x2D]/ /g')"
然后我会运行它来检查是否有多个空格并将其减少为一个空格,例如
clean_url=$(sed 's/ */ /g' <<< ${clean_url})
答案3
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
答案4
简化的 Bash 参数扩展:
root@debian:# CLIP=$'http://abc\".x\'y`.com';cleanclip=$(echo ${CLIP//[\'\`\"]});echo $cleanclip
#Output:
http://abc.xy.com
PS:要删除的模式位于 [] 内部,并且字符被转义。
看Bash 手册,第 3.5.3 段关于${参数/模式/字符串}