我不想用单词替换任何字母。我只想用完全区分大小写的匹配替换单独的字母。
我有一个看起来像这样的文件:
file>-string pile stage one on one/a>b
system > use while one is one stage/sump/f
get sole--> one by one dir/sub/main/c >b
multi string return one by one sub//c static a
ect...
ect...
我想替换不属于单词的字母。
a=ASTRING
b=BSTRING
c=CSTRING
f=FSTRING
所需的输出如下:
file>-string pile stage one on one/ASTRING>BSTRING
system > use while one is one stage/sump/FSTRING
get sole--> one by one dir/sub/main/CSTRING >BSTRING
multi string return one by one sub//CSTRING static ASTRING
ect...
ect...
这是我一直在尝试的:
sed -i "s|a|ASTRING|g" file.txt
grep [a] file.txt | sed -i "s|a|ASTRING|g"
Repeated for b c f
答案 0 :(得分:2)
在正则表达式中使用\b
来匹配单词边界。
sed -i 's/\ba\b/ASTRING/g' file.txt
顺便说一句,如果将输入管道输送到-i
,则不能使用sed
,文件名必须是sed
的参数。如果它从标准输入中获取输入,则它不知道文件名,因此无法就地更新文件。
答案 1 :(得分:0)
nameref变量进行救援。
a=ASTRING
b=BSTRING
c=CSTRING
f=FSTRING
for v in a b c f
do declare -n R=$v
sed -Ei "s/\\b$v\\b/$R/g" file.txt
done