如何用sed提取两个字符之间的字符串

如何用sed提取两个字符之间的字符串

我需要一些帮助sed。我试图寻找信息来执行此操作,但我找不到任何具体信息,而且人们几乎没有对所提供的解决方案提供解释,因此这使得很难理解其sed工作原理。

基本上我有以下格式的文件:

NAME_DIGITS_ddd-11s-21a-ds_DIGITS_DIGITS.xml

我想复制第一个数字(例如00004574),它是第一个和第二个下划线之间的字符串。

知道如何做到这一点吗?

考虑到第一个数字可能是0我可以做什么来删除它们?

我将不胜感激这两种情况的任何例子,并且解释也将非常受欢迎。

我实现了相反的目标:删除第一个和第二个下划线之间的字符:sed s/_[^_]*_/_/但看不到如何做我真正需要的事情。

答案1

 awk -F "_" '{print $2}'

就可以了!

另外如果你真的很想使用 sed

sed 's/^[^_]*_\([^_]*\)_.*/\1/g'

由于 sed 没有非贪婪匹配,因此我们必须搜索不在_第一个和第二个下划线之间的任何内容!

答案2

您写道您有以下格式的文件:NAME_DIGITS_ddd-11s-21a-ds_DIGITS_DIGITS.xml并且您想要复制(提取?)下划线之间的第一个数字。

由于您的部分是用下划线清晰分隔的,因此您可以使用如下内容:

echo NAME_DIGITS_ddd-11s-21a-ds_DIGITS_DIGITS.xml | cut -d_ -f2

该命令使用下划线作为指定分隔符 ( )cut提取字段 2 ( )-f2-d_

答案3

你想要的命令是:

sed -ne 's/^[^0-9_][^_]*_0*\([0-9]*\)_.*/\1/p'

如果您希望显示前导零,请删除 0*。

答案4

其他sed

sed '/\n/!{s/_0*/\n/g;D;};P;d'

或者

sed 's/_0*/\n/;/^[0-9]/!D;P;d'

相关内容