从变量中删除不需要的字符的脚本

从变量中删除不需要的字符的脚本

我有一个设置变量的脚本。它通常是从 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

你可以使用bash参数扩展启用后扩展的通配符

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 段关于${参数/模式/字符串}

相关内容