正在处理的数据将遵循特定的模式。在这种情况下,我想隔离在第三列中找到的所有字符,并返回在“-”之后找到的所有字符,但前提是该列中存在该分隔符。否则,它将不返回任何内容。
eval $A=$(echo $1 | awk -F"." '{print $3}' | cut -d\- -f2-)
第一条awk
语句将字符串分成
111
222
333-ab3-On21-2
该cut
命令在第一个“-”之后打印字符。
字符串1 111.2222.333-ab3-On21-2
返回所需的结果:
ab3-On21-2
字符串2 111.2222.334
返回不需要的结果:
333
该"-"
分隔符是不存在的字符串的最后一节,怎么会这样的代码改为在这种情况下返回0或“”?
我不确定您从何处获得“条件”,因为您的陈述中没有任何条件。在awk -F- {print}
没有做任何有用的事; 只是将输入传递到输出。
但是,您可以使用sed
表达式做您想做的事情,以简化整个管道:
sed -n 's/.*\.[^-]*-\(.*\)/\1/p'
该-n
和p
手段,这将只打印与表达式匹配的字符串。
该表达式将剥离到最后一个.
,然后剥离第一个之前的所有内容-
。
所以:
% echo 111.2222.333-ab3-On21-2 | sed -n 's/.*\.[^-]*-\(.*\)/\1/p'
ab3-On21-2
% echo 111.2222.333 | sed -n 's/.*\.[^-]*-\(.*\)/\1/p'
%
如果您输入的内容比较复杂(例如,可能有四个.
定界字段),则模式可能需要更巧妙一些。
sed -n 's/.*\.[^-]*-\([^\.]*\).*/\1/p'
例如
% echo 111.2222.333-ab3-On21-2.999 | sed -n 's/.*\.[^-]*-\([^\.]*\).*/\1/p'
ab3-On21-2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句