【问题标题】:Replace _ with a space shell将 _ 替换为空格壳
【发布时间】:2015-05-25 16:18:09
【问题描述】:

我有一个文件夹,里面有名为 name_surname.jpg 的 .jpg 图片

我做了一个循环:

for f in *.jpg;do
instructions...
done

我希望我用空格来替换 _。我知道有 tr 命令或 sed 正则表达式。但在这种情况下,我不知道该怎么感谢你。

请注意,我不希望显示图片的名称,而是将它们恢复(在 var 中?)以供以后再次使用

【问题讨论】:

    标签: shell


    【解决方案1】:
    new_f=`echo $f | sed -e 's/\ /_/'`
    mv $f $new_f
    
    sed 中的

    s 本质上是 s将第一个 / 之间的文本替换为第二个 / 中的文本。在你的情况下,用下划线替换空格。

    【讨论】:

    • 问题是要求相反,用空格替换下划线。你可能想把它翻转过来。
    • 那告诉我 :mv: "name_surname.jpg" 和 "name_surname.jpg" 识别同一个文件
    • 这也是错误的——它不能正确处理带有制表符或空格的文件名。
    • @Digger,它告诉你,因为它在错误的方向上进行替换,但这很容易修复。更大的问题是引用(以及它对不寻常文件名的正确性的影响),以及使用sed 的效率低下。
    【解决方案2】:

    here the simple version

    这里是扩展的:

    #!/bin/bash
    for foo in *.jpg; do
    bar="${foo//_/ }"
    mv "$foo" "$bar"
    done
    

    【讨论】:

    • 完全正确。我希望有更准确的时间戳,这样我们就可以知道是谁先到达的。
    • 呵呵,我想我快了 4 分钟,但在那里用 bar 变量进行了编辑;D 感谢内置规则的支持!
    • 看起来你确实第一个到达那里(虽然是几秒钟,而不是几分钟);删除我的答案。
    • @CharlesDuffy 我已经尝试过你的答案,你已经延迟了。它的工作但是当我尝试打开图像时出现错误图像文件误解 JPEG(在状态 200 中对 JPEG 库的调用不正确)有什么想法吗?
    • @Digger,我猜你先测试了SMA给出的答案?那个损坏了你的文件。它们仍然损坏。
    猜你喜欢
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 2013-06-19
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    相关资源
    最近更新 更多