程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了用 sed 替换 1 个字符大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决用 sed 替换 1 个字符?

开发过程中遇到用 sed 替换 1 个字符的问题如何解决?下面主要结合日常开发的经验,给出你关于用 sed 替换 1 个字符的解决方法建议,希望对你解决用 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]

除非您使用 -E 选项,否则您必须转义 {} 量词。

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
,

如果你的系统上有 the perl rename,你会写

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,请注明来意。