簡體   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