我试图显示第一个'字符串'的行号。从长字符串变量中出现并将结果设置为其他变量。
显示第一个'字符串"我使用的出现:
grep -n -m 1 String Filename.csv |cut -f1 -d:
工作正常。但是我想得到' String'数组变量的值和Filename.csv切换到长字符串。例如:
string[0]='Column2'
Query="Select Column1,
Column2,
Column3
From dual"
现在:
Line_number=$(grep -n -m 1 ${string[0]} "$Query" |cut -f1 -d:)
echo $Line_number
结果应该是:2
不显示: grep:"选择Column1, 列2, 栏3 从双"没有相应的文件和目录 怎么了?
答案 0 :(得分:0)
将脚本更改为:
string[0]='Column2'
Query="Select Column1,\n
Column2,\n
Column3\n
From dual"
Line_number=$(echo $Query | grep -n -m 1 ${string[0]} |cut -f1 -d:)
echo $Line_number
看看你会得到什么。
答案 1 :(得分:0)
arr=$(echo "${string[@]}")
line_number=$(awk -v var="$arr" '$0 ~ var{print NR;exit 0}' <<<"$Query")
echo "$line_number"
这里发生了什么?
awk
,因此我们echo
对其进行了编辑并将其存储在arr
中。var="$arr"
将shell变量存储到awk
变量var
。$0 ~ var{print NR;exit 0}
检查(〜)模式,打印第一次出现的行号并退出脚本。<<<
称为herestring,它可以帮助您将字符串传递给命令。arr=$(echo "${string[@]}")
line_number=$(sed -n "/$arr/{=;q}" <<<"$Query")
echo "$line_number"
这里发生了什么?
sed
,因此我们echo
对其进行了编辑并将其存储在arr
中。-n
选项会抑制正常输出。/$arr/{=;q}
检查模式(/stuff/
),打印行号(=)然后退出(q)sed。