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