我有以下脚本,由于某种原因它无法正常工作
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个短划线" ---"用一个短划线?
谢谢,
答案 0 :(得分:0)
看看man tr
。 tr
只会替换单个字符。
使用类似perl -wpe "s/---/-/"
的内容。
另请查看man 1p rename
。它正在做你想做的事情:
rename 's/---/-/' *---*
答案 1 :(得分: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