使用 sed 处理每个字符直到给定序列

Using sed to dispose of every character until a given sequence

我正在尝试使用 sed 将流 9906884*n.6[2213] 转换为 9906884[2213]。我目前正在使用 awk '{A=; print A }' 将其添加到我提到的流中,但我正在尝试使用 sed 将 *n.6[2213] 转换为 [2213]

是否有合适的 sed 正则表达式 "grab everything before '\[[0-9]*\]'" 即,再次查找“[”和任意数量的数字,然后再查找“]”。如果是这样,我将简单地使用 sed 's/the_sed_regex//g' 来处理前面 awk 语句中的前几个字符。

使用 BASH 你可以:

s='*n.6[2213]'
echo "${s/*[/[}"
[2213]

或使用 sed:

echo "$s" | sed 's/.*\[/[/'
[2213]

有很多方法可以获得您想要的输出。例如:

$ echo "9906884*n.6[2213]" | awk -F'[\[*]' '{print  "[" }'
9906884[2213]

$ echo "9906884*n.6[2213]" | sed 's/\*[^[]*//'
9906884[2213]

这两种方法中的任何一种都从输入中删除 *[ 之间的部分。在 awk 版本中,[ 被删除并替换。