我需要一些帮助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'