我没有从sed那里得到我期望的行为。
从我所看到的,我应该可以使用:
sed -e 's/findfirsthing/replace/;s/findsecondthing/replace/'
然而我没有成功。正如您从下面的输出中看到的那样。虽然我想删除" ca。"和" ca-a。"从搜索来看,它只是部分工作。
macbook:labs alex$ cat ca_vip.txt
ca.1
ca-a.2
3
4
macbook:labs alex$ cat vip.sh
#!/bin/bash
for line in `cat ca_vip.txt`
do
if [[ $line =~ [ca.*] || [ca-a.*] ]]
then
echo $line | sed -e 's/ca.//;s/ca-a.//' >> temporary.txt
elif [ $line != [ca.*] || [ca-a.*] ]
then
echo $line >> temporary.txt
fi
done
macbook:labs alex$ ./vip.sh
macbook:labs alex$ cat temporary.txt
1
a.2
3
4
我期望的输出是:
1
2
3
4
答案 0 :(得分:1)
你的模式重叠,更好地结合它们,你也不需要循环。
$ sed -r 's/ca(-a)?\.//' ca_vip.txt
1
2
3
4
如果您想要每行多次替换,请添加g后缀。