bash - Shell脚本:用另一个字符替换特殊字符
问题描述
我有一个名称上有特殊字符的文件,我想用“X”替换它的每个特殊字符:
我的特殊字符:空格,!@'?& ( ) [ ] `
我试过了sed
,tr
但我没有找到让它工作的方法,我考虑过使用 [:alanum:] oftr
但我不希望其他字符改变。
这是我的文件的名称:
aze !on'(@?.txt
我想要的结果是:
azeXXonXXXX.txt
解决方案
在 bash 中,您可以使用mv
with 参数替换
#! /bin/bash
touch "aze !on'(@?.txt" "aze,!@'?&()[]\`"
for f in aze* ; do
mv "$f" "${f//[ ,\!@?&()\[\]\'\`]/X}"
done
如果你想使用tr
,你可以:
for f in aze* ; do
new=$(tr ' ,!@?&()[]`'\' 'X' <<< "$f")
mv "$f" "$new"
done
或者,使用 POSIX 类,
new=$(printf %s "$f" | tr -c '[:alnum:].' X)
# or
new=$(tr -c '[:alnum:].\n' X <<< "$f")
请注意,换行符需要包含在 中,因为它已添加到输入中,如果不包含,则<<<
随后替换为。X
sed 也一样:
new=$(sed 's/[][ ,!@?&()`'\'']/X/g' <<< "$f")
推荐阅读
- javascript - 密码生成器出现“RangeError:超出最大调用堆栈大小”
- javascript - 如何创建一个返回数组中第一个重复值的索引的函数?
- javascript - 函数卡在一个值上(它返回但值不更新)JS
- mysql - 如何按状态比较时间戳计算正常运行时间率
- firebase - 如何使用 Flutter 从 Firebase 存储中删除文件夹
- appium - Appium Android SDK错误:本地文件系统上不存在SDK根文件夹,即使在Mac中包含SDK_root的系统变量后也是如此
- python - 如何比较两个数据框并根据条件填充列值?
- python - 读取和写入 csv 文件时出现 Python pandas 错误
- c# - 从多个字典中获取不同的键
- vba - 如何将 VARIANT 变量从一个 sub 传递和转换为另一个 sub 中的 OBJECT 变量?