我继承了一段代码,其中使用“命令宏”代替要运行的底层命令,例如,$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)