SED在getopts中有多个字符

时间:2013-08-13 10:19:13

标签: unix sed getopts

我正在尝试创建一个可以使用

等命令的脚本
script -c abcd test.txt

它将删除test.txt中的任何字符abcd

这是我到目前为止的代码:

while getopts ":c:" opt; do
  case $opt in
    c)
      sed 's/'$OPTARG'//g'
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
  esac
done

但这只能消除我文件中的“abcd”,而不是a或b或c或d,而不是acdb等。 如何让SED将OPTARG视为单独的字符?

2 个答案:

答案 0 :(得分:3)

改为使用tr

tr -d "$OPTARG"

将删除OPTARG中的所有字符。

或者如果你坚持使用sed,请使用字符集:

sed "s/[$OPTARG]//g"

答案 1 :(得分:0)

您需要将字符组合在一起,以便它们是character class

ross@ross-laptop ~> cat foo
agkdjbdefghijglkthdn

ross@ross-laptop ~> sed 's/[abcd]//g' foo
gkjefghijglkthn

希望有所帮助。