【发布时间】:2021-05-13 08:42:55
【问题描述】:
给定
str="hij";
sourceStr="abc\nefg\nhij\nlmn\nhij";
我想得到$str在$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。
如何获取$sourceStr中$str的行号?
谢谢!
【问题讨论】:
-
您创建了一个变量,其中包含一行多次包含文字字符串
\n。您是否打算将sourceStr用作多行字符串? -
您想要字符串比较还是正则表达式比较?
-
嗨@WilliamPursell,我的意思是多行字符串。我认为 Shell 会将其解释为多行字符串。感谢您指出并给出答案。我今天学到了新东西!
-
嗨@EdMorton,我如何实现目标并不重要。我只是想获取源字符串中匹配行的行号。
-
对,我的问题是——目标是什么?是进行字符串比较还是正则表达式比较?例如,如果
v是a.c,它应该只匹配输入中的a.c(就像它与字符串比较一样)还是它也应该匹配abc(就像它与正则表达式比较一样)?有关不同类型比较的更多信息,请参阅how-do-i-find-the-text-that-matches-a-pattern。