小编FKE*_*net的帖子

sed 字边界:用命令替换命令宏

我继承了一段代码,其中使用“命令宏”代替要运行的底层命令,例如,$TR使用 代替tr. 我想用来sed将命令宏转换回它们引用的 shell 命令。问题出在单词边界上:

$ echo '$TR $TRUE $TRUNCATE "$TR ($TR' | sed s/\$TR/tr/g
tr trUE trUNCATE "tr (tr
Run Code Online (Sandbox Code Playgroud)

显然是错误的。但是,当我尝试使用\b设置翻译的单词边界时,这也不起作用:

$ echo '$TR $TRUE $TRUNCATE "$TR ($TR' | sed s/\$TR\b/tr/g
$TR $TRUE $TRUNCATE "$TR ($TR
Run Code Online (Sandbox Code Playgroud)

按宏长度逆序搜索(即,首先替换$TRUNCATE,然后$TRUE,然后$TR)并不是一个完整的解决方案,因为还存在诸如$TS $TS_FORMAT仅将独立的内容$TS转换为 之类的情况ts

\b单词边界标签在这里不起作用有什么原因吗?我需要做什么来解决这个问题?

$ sed --version
sed (GNU sed) 4.7
Packaged by Debian
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: …
Run Code Online (Sandbox Code Playgroud)

sed regular-expression

2
推荐指数
1
解决办法
209
查看次数

标签 统计

regular-expression ×1

sed ×1