1

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

script -c abcd test.txt

它会删除test.txt中的任何字符abc或。d

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

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

4

2 回答 2

3

改用tr

tr -d "$OPTARG"

将删除 OPTARG 中的所有字符。

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

sed "s/[$OPTARG]//g"
于 2013-08-13T10:23:34.703 回答
0

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

ross@ross-laptop ~> cat foo
agkdjbdefghijglkthdn

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

希望有帮助。

于 2013-08-13T10:32:04.640 回答