[英]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.