regex - 给定一个字符串,如何去除第一个字符的运行? (sed)

标签 regex bash sed

我需要一个 sed 命令,它接受一个字符串并从开头删除第一个字符的所有副本(但不从字符串的其余部分删除)。

例如,AAABAC 应该产生 BAC,因为第一个字母是 A,所以我们从头开始删除整个 A。

我最初的想法是:

data=$(echo $data | sed 's/^.\+\(.*\)/\1/')

但这不起作用(输出空字符串)。如果我将第一个 . 替换为特定字符,它将成功地只针对该字符工作,但我无法正确地将其设置为通配符。

我认为 . 匹配我想要的第一个字符,但是 + 不记得我想要的字母并继续接受每个字符,直到字符串的末尾,以便括号不包含任何内容,因此整个字符串将被替换为任何内容。我怎样才能最初接受任何字符,然后为 +“锁定”该字符?

最佳答案

您可以使用:

$> s='AAABAC'
$> sed -E 's/^(.)\1*//' <<< "$s"

BAC
  • (.) 将匹配第一个字符并将其捕获到组#1
  • \1* 将匹配相同字符的 0 个或多个实例

或者这是一种纯 BASH 方式来做同样的事情:

$> shopt -s extglob
$> echo "${s##+(${s:0:1})}"

BAC

${s:0:1} 为我们提供了 $s 的第一个字符和 ##+(${s:0:1}) 从头开始​​删除第一个字符的所有实例。

关于regex - 给定一个字符串,如何去除第一个字符的运行? (sed),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40205939/

相关文章:

bash - 如果在非连续行上以特定字符开头,则删除换行符

java - 将正则表达式的匹配部分插入到替换文本中

javascript - 正则表达式删除除字母和 '[单引号] 之外的任何内容

linux - 使用 bash 脚本替换配置文件变量

linux - 对于第 2 列的唯一值,计算 linux 中第 11 列和第 17 列的所有对应值的平均值

regex - 如何在 BASH 中查找和替换文件每一行的最后一个空格?

JavaScript 正则表达式反向引用从单个捕获组(多个组)返回一组匹配项

python - 匹配由另一个正则表达式分隔的所有内容?

bash - 在 go 中使用 "redirecting of an output from a subshell"语句运行 shell 命令

awk - 使用模式匹配以及前 6 列从第 7 列打印特定值