繁体   English   中英

如何在Unix Shell脚本中找到文件中字符串的位置

[英]how to find the position of a string in a file in unix shell script

你能帮我解决这个难题吗? 我试图在文件中打印字符串(即行号)的位置,首先打印到std输出,然后在变量中捕获该值,以备后用。 字符串为“我的字符串”,文件名为“ myFile”,定义如下:

this is first line
this is second line
this is my string on the third line
this is fourth line
the end

现在,当我直接在命令提示符下使用此命令时:

% awk ‘s=index($0, “my string”) { print “line=” NR, “position= ” s}’ myFile

我得到的正是我想要的结果:

% line= 3, position= 9

我的问题是:如果定义变量VAR =“我的字符串”,为什么在执行此操作时无法得到相同的结果:

% awk ‘s=index($0, $VAR) { print “line=” NR, “position= ” s}’ myFile

只是行不通! 我什至尝试将$ VAR放在引号中,无济于事? 我尝试使用VAR(不带$符号),但不走运。 我尝试了所有我可能想到的一切……我是否缺少某些东西?

awk变量与shell变量不同。 您需要使用-v标志来定义它们

例如:

$ awk -v var="..." '$0~var{print NR}' file

将打印图案匹配的行号。 或针对您的索引

$ awk -v var="$Var" 'p=index($0,var){print NR,p}' file

使用所有大写字母可能不是一个好习惯,因为您可能会意外覆盖其他变量。

将输出捕获到shell变量中

$ info=$(awk ...)

对于将多行输出分配给shell数组,您可以执行

$ values=( $(awk ...) ); echo ${values[0]}

但是,如果输出包含多个字段,则会为其分配自己的数组索引。 您可以通过设置IFS变量来更改它,例如

$ IFS=$(echo -en "\n\b"); values=( $(awk ...) )

它将捕获完整的行作为数组值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM