linux - 如何使用 bash 脚本从文件中删除多个相同的字符?
问题描述
我有这个脚本,它从文件中删除第一个句点以取消隐藏它。但是,它所能做的只是删除第一个句点而不是后续句点,这使得文件仍然隐藏。我现在想知道的是如何一次删除多个句点以取消隐藏文件。
#!/bin/bash
period='.'
for i in $@; do
if [[ "$i" == "$period"* ]] ; then
mv "$i" "${i#"$period"}"
else
mv $i .${i}
fi
done
我对使用 grep 和 regex 有一些了解,所以我想用 + 一次删除很多,但我真的不知道这是否是正确的方法
解决方案
您可以使用 bash 扩展 glob+(pattern)
来匹配一个或多个句点,并结合##
参数扩展来删除最长的前导匹配:
#!/usr/bin/env bash
# Turn on extended globs
shopt -s extglob
name=...foo
printf "%s -> %s\n" "$name" "${name##+(.)}"
或者您可以使用正则表达式,结合查找前导句点和捕获名称的其余部分:
#!/usr/bin/env bash
# Note the quoted parameters to avoid many issues.
for i in "$@"; do
if [[ "$i" =~ ^\.+(.*) ]]; then
mv "$i" "${BASH_REMATCH[1]}"
else
mv "$i" ".${i}"
fi
done
推荐阅读
- angular - Angular - 切换开关后禁用日期选择器
- jquery - 访问嵌套元素jquery时出现问题
- mongodb - mongodb's $inc, incrementing a field that does not exists (upsert case)
- json - 在带有状态和道具的列表中显示 JSON 对象
- scala - 合并多个 RDD
- python-2.7 - 评估 python 格式字符串的预期值数量
- r - 在列表中使用 iconv?
- python - Python 最佳实践:初始化变量
- linux - linux权限问题
- vba - 从 Word VBA 脚本调用 CreateObject("Lotus.NotesSession") 时出现错误 429