大佬教程收集整理的这篇文章主要介绍了用 sed 替换 1 个字符,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 sed 使用正则表达式处理特定字符的更改。
本质上,我正在运行一个 bash 脚本,该脚本正在重命名具有特定字符串的文件,并且我需要将该字符串保持在大多数情况下。这是一个示例文件名:
_file20210714.023.jpg
所以我试图创建一个用于 nfile
命令的变量 @H_672_7@mv 并将其转换为以下内容:
_file20210714.123.jpg
请记住,我只想将最后的 0 更改为 1。
我想出了以下正则表达式来获取该特定字符,但我不知道如何用 sed
替换:
_file\d{8}\.\K0
nfile=$(echo ${filE}| sed -e 's/_file\d{8}\.\K0/_file\d{8}\.\K1/')
当我回显 nfile
变量时,我得到了原始名称,但我不知道如何解决这个问题。
echo ${filE}
echo ${nfilE}
/home/user/_file20210714.023.jpg
/home/user/_file20210714.023.jpg
一旦我可以将 023
替换为 123
我设置唯一的问题是我有多个以 .034.jpg
结尾的文件所以我不能直接字符串匹配它.
sed
不支持 \d
转义序列,您需要使用 [0-9]
。
sed
不支持 \K
,但我认为这里不需要。
您需要使用捕获组将原始名称中的数字复制到替换名称中。
nfile=$(echo "${filE}"| sed -E -e 's/(_FILE[0-9]{8}\.)0/\11/')
,
对于这种特殊情况,一个简单的参数替换就足够了:
for file in '_FILE20210714.023.jpg' '/home/user/_ACH20210714.023.jpg'
do
nfile="${file//.0/.1}"
echo "######################"
echo " file: ${filE}"
echo "nfile: ${nfilE}"
done
这会产生:
######################
file: _FILE20210714.023.jpg
nfile: _FILE20210714.123.jpg
######################
file: /home/user/_ACH20210714.023.jpg
nfile: /home/user/_ACH20210714.123.jpg
,
rename -v 's/\.0(\d+\.jpg)$/.1$1/' *.jpg
自从你标记了 bash
newname () {
local parts=() IFS="."
read -ra parts <<< "$1"
parts[1]="1${parts[1]#0}"
echo "${parts[*]}"
}
for file in *.jpg; do
mv -v "$file" "$(newname "$file")"
done
以上是大佬教程为你收集整理的用 sed 替换 1 个字符全部内容,希望文章能够帮你解决用 sed 替换 1 个字符所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。