SED在getops中包含多个字符



我正在尝试创建一个可以使用等命令的脚本

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作为单独的字符读取?

改用tr

tr -d "$OPTARG"

将删除OPTARG中的所有字符。

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

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

您需要将字符分组在一起,使它们成为一个字符类。

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

希望能有所帮助。

最新更新