如何搜索和替换整个单词。
我写了一个像这样的剧本
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 panicA
panciA0中的0被删除了,我想删除单词,如果它不存在字符
我怎么能做到这一点?
我使用了sed
,即使这对我不起作用
Current=`sed "s/\bCurrent\b/$Bypass_final/g"`
答案 0 :(得分:0)
您可以尝试这样的事情: -
sed "s/[[:<:]]Yourword[[:>:]]/Replacedword/g"
答案 1 :(得分: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
答案 2 :(得分: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"