给定
str="hij";
sourceStr="abc\nefg\nhij\nlmn\nhij";
我想获取 $sourceStr
中第一次出现 $str
的行号,应该是 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
。
如何获取$sourceStr
中$str
的行号?
谢谢!
最佳答案
您可以在 bash
中使用此 awk + printf
:
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
关于shell - Shell中如何获取一个字符串在另一个字符串中的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66123719/