我需要将结果从分配给grep
数组...例如
grep -n "search term" file.txt | sed 's/:.*//'
这导致一堆带有行号的行,在其中找到了搜索词。
1
3
12
19
将它们分配给bash数组的最简单方法是什么?如果我简单地将它们分配给变量,它们将成为一个以空格分隔的字符串。
我需要将结果从分配给grep
数组...例如
grep -n "search term" file.txt | sed 's/:.*//'
这导致一堆带有行号的行,在其中找到了搜索词。
1
3
12
19
将它们分配给bash数组的最简单方法是什么?如果我简单地将它们分配给变量,它们将成为一个以空格分隔的字符串。
grep
用于获取某项的行号并将其最终传递给具有正则表达式支持的工具。然后,它可以找到与找到的相同的行grep
,而无需绕开找出比赛的行号的弯路。
Answers:
要将命令的输出分配给数组,需要在数组分配内使用命令替换。对于一般命令,command
它看起来像:
arr=( $(command) )
在OP的示例中,内容为:
arr=($(grep -n "search term" file.txt | sed 's/:.*//'))
内部$()
运行命令,而外部()
使输出为数组。问题是当命令的输出包含空格时它将不起作用。要处理此问题,可以设置IFS
为\n
。
IFS=$'\n'
arr=($(grep -n "search term" file.txt | sed 's/:.*//'))
unset IFS
您还可以通过对数组的每个元素执行扩展来减少对sed的需求:
arr=($(grep -n "search term" file.txt))
arr=("${arr[@]%%:*}")
dvmList=`grep -RohP '(?<=oramds:).+\.dvm' myFolder
`
空格分隔的字符串可以在bash中轻松遍历。
# save the ouput
output=$(grep -n "search term" file.txt | sed 's/:.*//')
# iterating by for.
for x in $output; do echo $x; done;
# awk
echo $output | awk '{for(i=1;i<=NF;i++) print $i;}'
# convert to an array
ar=($output)
echo ${ar[3]} # echos 4th element
如果您想使用文件名中的空格 find . -printf "\"%p\"\n"
find . -printf "\"%p\"\n"