0

我有以下脚本,由于某种原因它不起作用

find . -name '*---*' | while read fname3 

do
    new_fname3=`echo $fname3 | tr "---" "-"`

    if [ -e $new_fname3 ]
    then
            echo "File $new_fname3 already exists. Not replacing $fname3"
    else
            echo "Creating new file $new_fname3 to replace $fname3"
            mv "$fname3" $new_fname3
    fi

done

但是,如果我使用

find . -name '*---*' | while read fname3 

do
    new_fname3=`echo $fname3 | tr "-" "_"`

    if [ -e $new_fname3 ]
    then
            echo "File $new_fname3 already exists. Not replacing $fname3"
    else
            echo "Creating new file $new_fname3 to replace $fname3"
            mv "$fname3" $new_fname3
    fi

done

该脚本有效,但我最终得到 3 个下划线“ _ ”如何用单个破折号替换 3 个破折号“---”?

谢谢,

4

2 回答 2

0

看看man trtr只会替换单个字符。

改用类似的东西perl -wpe "s/---/-/"

也看看man 1p rename。它几乎完全符合您的要求:

rename 's/---/-/' *---*
于 2013-05-22T16:06:46.807 回答
0

我相信您需要更改tr替换sed

tr '---' '-'应该改为sed -e 's/---/-/g

作为差异的示例:

$ echo "a---b" | tr '---' '-'
tr: unrecognised option '---'
try `tr --help' for more information

$ echo "a---b" | sed -e 's/---/-/g'
a-b
于 2013-05-22T16:09:25.890 回答