Sed多个搜索词

时间:2016-04-05 20:28:44

标签: bash sed

我没有从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

1 个答案:

答案 0 :(得分:1)

你的模式重叠,更好地结合它们,你也不需要循环。

$ sed -r 's/ca(-a)?\.//' ca_vip.txt
1
2
3
4

如果您想要每行多次替换,请添加g后缀。