Shell-Script
如何找到特定的“字元串”並列印出整行?
我有一個名為的文件
myfile.csv
,其中包含以下內容:abc:123:myname:1231 def:423324:arbitrary:value:string StackExchange:Unix:Linux
從我執行的終端
./myscript.sh def
的內容
myscript.sh
是:#!/bin/bash key_word_I_am_looking_for=$1 my_variable=`cat myfile.csv | awk -F: -v keyword="$key_word_I_am_looking_for" '( $1 == keyword )' END{print "$@" }'` echo "$my_variable"
我希望程式碼在ie或的第一個參數中搜尋單詞
def
或任何其他單詞。一旦找到,我希望它在沒有分隔符的情況下取出整行並將其放入變數中,並將其回顯到終端(因此輸出看起來像:何時輸入到終端。當輸出是) .myfile.csv``abc``StackExchange``my_variable``def 423324 arbitrary value string``./myscript.sh def``./myscript.sh StackExchange``StackExchange Unix Linux
我哪裡錯了?有替代方案嗎?
您的 awk 語法有點錯誤。
#!/bin/bash awk -F: -v keyword="$1" '$1 == keyword {$1=$1; print}' myfile.csv
這裡的技巧是重新分配其中一個欄位的值,強制 awk 重新計算 $ 0 using the output file separator. Here, the default OFS is a space, so assigning the value of $ 1 to 自身將冒號更改為空格。
一種非 awk 的寫法是:
grep "^$1:" myfile.csv | tr ":" " "
但這使用正則表達式匹配,而不是字元串相等
這是一個
sed
替代方案:sed -n '/^def:/s/:/ /gp' myfile.csv
如果將字元串作為第一個位置參數傳遞:
sed -n "/^$1:/s/:/ /gp" myfile.csv