0

仅当数字完全匹配时如何删除

我写了简单的 sed 命令,下面是 sed 的例子,

我的目标是从 $NUMBERS 列表中删除数字“1”

我需要添加到我的 sed 语法中才能仅删除匹配的数字/秒

我的例子:

 [u@h w]# NUMBERS="11 12 13"
 [u@h w]# DEL_NUM="1"
 [u@h w]# NUMBERS="1 11 12 13"
 [u@h w]# echo $NUMBERS | sed s"/$DEL_NUM/ /g"


      2  3

而预期的结果应该是

      11 12 13
4

3 回答 3

3
 echo $NUMBERS | perl -pe "s/\b$DEL_NUM\b/ /g"

\b 匹配单词边界。

于 2013-04-29T06:35:01.753 回答
1

有一种方法:用要匹配的单词sed换行:<>

$ echo $NUMBERS | sed "s/\<$DEL_NUM\>/ /g"
  11 12 13

这只会替换完全匹配。

\b关于sidharth 答案的参考对 sed 也有效:

$ echo $NUMBERS | sed "s/\b$DEL_NUM\b/ /g"
  11 12 13
于 2013-04-29T08:54:09.693 回答
0

仅使用 ksh 内置函数:

function delnum {
    typeset DEL_NUM=$1 i 
    shift || return
    for i; do
        [[ $i == $DEL_NUM ]] || print -n $i ""
    done
}
DEL_NUM="1"
NUMBERS="1 11 12 13"
delnum ${DEL_NUM} ${NUMBERS}
11 12 13
于 2013-04-30T13:10:25.043 回答