我需要改变类似的东西
<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 '>'
这更像是一个玩笑解决方案,而不是任何严肃的解决方案,但是将工作如果输入中出现的唯一<
和>
是中间有数字的。