1

如何搜索和替换整个单词。

我写了一个这样的脚本

Profile="panicA2 panicA1 panicA0 gasleakB0"
Bypass="0 panicA1 gasleakB0"
Current="$Profile"
for Bypass_final in $Bypass ; do
    Current=${Current/$Bypass_final/ }
done

我的脚本的预期输出是panicA2 panicA0

但我的输出是panicA2 panicApanciA0 中的 0 被删除,如果它不是字符,我想删除它我怎么能做到这一点?

sed什至用过这对我不起作用

Current=`sed "s/\bCurrent\b/$Bypass_final/g"`
4

3 回答 3

0

它可以一次替换所有需要的单词sed,而不是遍历它们并一个一个替换。

Profile="panicA2 panicA1 panicA0 gasleakB0"
Bypass="0 panicA1 gasleakB0"

# prepare the regex
Pattern=$(echo "\\b\\("$Bypass"\\)\\s\\?\\b" | sed 's/ /\\\|/g')
echo $Pattern # \b\(0\|panicA1\|gasleakB0\)\s\?\b

echo $Profile | sed "s/$Pattern//g"
于 2013-08-19T13:51:33.940 回答
0

你可以尝试这样的事情: -

sed "s/[[:<:]]Yourword[[:>:]]/Replacedword/g"
于 2013-08-19T06:54:57.963 回答
0

您的代码将始终匹配部分单词,以下应按预期工作。

Profile="panicA2 panicA1 panicA0 gasleakB0"
Bypass="0 panicA1 gasleakB0"
Current="$Profile"
for Bypass_final in $Bypass ; do
    if [[ $Current =~ ^$Bypass_final[[:space:]](.*)$ ]] \
        || [[ $Current =~ ^(.*)[[:space:]]$Bypass_final$ ]] \
        || [[ $Current =~ ^(.*)[[:space:]]$Bypass_final[[:space:]](.*)$ ]]; then
        Current=${BASH_REMATCH[@]:1:$[${#BASH_REMATCH[*]} - 1]}
    fi
done

echo $Current
于 2013-08-19T11:39:21.360 回答