regex - bash:带正则表达式的字符串运算符

标签 regex linux bash shell terminal

我想列出我的 home 文件夹中的所有文件,并删除文件名中的 #。 例如: #.emacs# 应该打印成 .emacs

这是我的代码

for dir in $(ls ~)
do
    # trim trailing
    filename="${dir#\#}"
    echo ${filename}
done

但它仍然显示以 # 开头的文件,尽管我在终端中管理了正则表达式 ${dir#\#}

你能告诉我我的代码哪里有异味吗?

最佳答案

从文件名中删除#,应该是:

filename="${dir//#/}"

编辑:在某些系统(如Solaris)中,上面的命令不起作用,你需要转义。

filename="${dir//\#/}"

其余的都适用于 cygwin 和 Solaris。

如果你需要删除#之前的所有内容

filename="${dir##*#}"

如果你需要删除#之后的所有内容

filename="${dir%%#*}"

这是我从 bash Substring Replacement 复制粘贴的完整解释

${string/substring/replacement}
Replace first match of $substring with $replacement.

${string//substring/replacement}
Replace all matches of $substring with $replacement.

${string%substring}
Deletes shortest match of $substring from back of $string.

${string%%substring}
Deletes longest match of $substring from back of $string.

${string#substring}
Deletes shortest match of $substring from front of $string.

${string##substring}
Deletes longest match of $substring from front of $string.

关于regex - bash:带正则表达式的字符串运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21844221/

相关文章:

PHP preg_match "AND"运算符

javascript - 如何在 JavaScript 中将变量传递到 regExp 对象并使其工作

python - 如何通过在python中排除RFC1918私有(private)地址来匹配IPV4正则表达式模式

linux - 如何构建内核模块的单个源文件

c# - 如何使用 nohup 在 Mono 中执行进程?

linux - 如何使用 "awk"执行具有相同尾部的多个文件并导出到一些具有新尾部的新文件?

php - 在 PHP PCRE 函数中双重转义或不双重转义?

linux - 如何修复此无法查看在 Linux 中运行的 Codeigniter 3 中的登录页面

bash - 在 bash 脚本中使用 while 循环检查两个条件

java - 如果通过 CTRL + C 终止脚本,如何终止由脚本启动的 Java 进程?