2017-04-10 58 views
0

我正在尝试编写一个shell脚本来替换每个不是大写字母的字符。第一个参数是一个字符(这将替换其他字符),而其他参数是文件名。当我在终端中尝试Sed命令时,它工作得很好,但是在我的脚本中,它只是打印出除了以给定字符开头的行之外的每一行。 (我想在标准输出结果)sed不替换Bash脚本中的字符

for i in "${@:2}" 
do 
    if [ -f $i ] 
    then 
     sed "s/[^A-Z]/${1}/g" $i 
    else 
     echo "$i does not exist" 
    fi 
done 
+0

对于您发布的脚本来说,只是不可能像您说的那样行事。还有一些其他内容与该脚本的内容无关。 –

+0

我再次检查,它没有问题。谢谢大家的帮助,并遗憾浪费你的时间。 – user3529379

回答

0

你可以试着更换:

sed "s/[^A-Z]/${1}/g" $i 

由:

sed -e "s/[^A-Z]/${1}/g" $i 

要更换每一个字母为大写,你可以这样做:

sed -e 's/\(.*\)/\U\1/' $i 
+0

不幸的是,它没有帮助。 – user3529379

+0

对不起,我没有正确阅读这个问题;我会删除我的答案! – Till

+0

我更新了anwser。它有帮助吗? – Till

0

我检查了你的脚本usi ng f1,f2,f3具有相同的内容,你确定它不工作?

line1 Something Something Something 
line2 Something Something Something 
line3 Something Something Something 

./input_test.sh x f1 f2 f3 
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx 
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx 
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx 
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx 
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx 
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx 
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx 
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx 
xxxxxxSxxxxxxxxxSxxxxxxxxxSxxxxxxxx