将 更改为 _1

将  更改为 _1

我需要改变类似的东西

<1> to _1
<21> to _21

有没有办法可以使用 sed、awk 或 vi 自动执行此操作?

注意:尖括号内的数字有所不同。

答案1

sed

sed 's/<\([0-9]*\)>/_\1/g'

在问题中的示例上运行它会产生

_1 to _1
_21 to _21

该模式<\([0-9]*\)>与 内任意数量的数字相匹配<...>。替换文本将此<...>位输入替换为前缀为 的数字(如果有)_


在 Vi 中:

:%s/<\([0-9]*\)>/_\1/g

sed由于明显的历史原因,这相当于解决方案。


<21>如果 Bash 中的shell 变量中有该字符串var

printf '%s\n' "_${var//[<>]/}"

这将_21使用变量替换进行打印${parameter//pattern/string}


tr。注意:这给出了外貌处理非常有限的输入集。它盲目地替换<_和删除>,而不考虑它们发生的位置:

tr '<' '_' <file.in | tr -d '>'

这更像是一个玩笑解决方案,而不是任何严肃的解决方案,但是将工作如果输入中出现的唯一<>是中间有数字的。

相关内容