给定
str="hij";
sourceStr="abc\nefg\nhij\nlmn\nhij";
我想获取$str
in的第一个匹配项的行号,该行号$sourceStr
应为3
。
我不知道该怎么做。我试过了:
awk 'match($0, v) { print NR; exit }' v=$str <<<$sourceStr
grep -n $str <<< $sourceStr | grep -Eo '^[^:]+';
grep -n $str <<< $sourceStr | cut -f1 -d: | sort -ug
grep -n $str <<< $sourceStr | awk -F: '{ print $1 }' | sort -u
全部输出1
,不是3
。
如何获得$str
in的行号$sourceStr
?
谢谢!
您可以awk + printf
在bash
:
awk -v s="$str" '$0 == s {print NR; exit}' <(printf "%b\n" "$sourceStr")
3
甚至awk
没有任何bash
支持:
awk -v s="$str" -v source="$sourceStr" 'BEGIN {
split(source, a); for (i=1; i in a; ++i) if (a[i] == s) {print i; exit}}'
3
您也可以使用sed
:
sed -n "/^$str$/{=;q;}" <(printf "%b\n" "$sourceStr")
3
或者这个grep + cut
:
printf "%b\n" "$sourceStr" | grep -nxF -m 1 "$str" | cut -d: -f1
3
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句