【发布时间】:2019-09-21 08:24:33
【问题描述】:
有没有办法用 Sed/Awk/Perl 用它的长度替换一个模式?我正在寻找可以在 Bash 脚本中使用的小型便携式命令。
我的字符串都以特定字符开头(比如说x),我想用它们的长度替换这些重复的x。
所以
xxxx rest of the line
xxx again
xx again and again
xxxxx you got my point
会变成
4 rest of the line
3 again
2 again and again
5 you got my point
Sed 可能不是一个好的候选者。我知道 Perl 有一个 e 选项,它允许在替换字符串中执行代码,但我不确定在这里如何使用它:perl -pe 's/^(x+)/length($1)/e'?
【问题讨论】:
-
好吧,看来我已经找到了解决方案。我编写的 Perl 命令正在运行。小心添加一个 awk 版本:) ?
-
您的前导
xs 后面是否总是有空格?是否总是领先xs?您是否关心每行未触及的空白? -
使用 bash:
while read -r -a array; do array[0]="${#array[0]}"; echo "${array[@]}"; done < file -
@EdMorton 是的,总是空间。我使用的字符是“组分隔符”
\035。 @Cyrus 确实,简单而纯粹的 bash!但我担心大文件会有点太慢:)