Shell-Script

如何找到特定的“字元串”並列印出整行?

  • September 15, 2021

我有一個名為的文件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

引用自:https://unix.stackexchange.com/questions/195644