使用通过grep命令获取的行号数组,我试图增加行号并使用sed命令检索新行号上的内容,但我假设我的语法有问题(特别是sed部分,因为其他一切都有效。)
该脚本显示:
#!/bin/bash
#getting array of initial line numbers
temp=(`egrep -o -n '\<a class\=\"feed\-video\-title title yt\-uix\-contextlink yt\-uix\-sessionlink secondary"' index.html |cut -f1 -d:`)
new=( )
#looping through array, increasing the line number, and attempting to add the
#sed result to a new array
for x in ${temp[@]}; do
((x=x+5))
z=sed '"${x}"q;d' index.html
new=( ${new[@]} $z )
done
#comparing the two arrays
echo ${temp[@]}
echo ${new[@]}
答案 0 :(得分:1)
这可能对您有用:
#!/bin/bash
#getting array of initial line numbers
temp=(`egrep -o -n '\<a class\=\"feed\-video\-title title yt\-uix\-contextlink yt\-uix\-sessionlink secondary"' index.html |cut -f1 -d:`)
new=( )
#looping through array, increasing the line number, and attempting to add the
#sed result to a new array
for x in ${temp[@]}; do
((x=x+5))
z=$(sed ${x}'q;d' index.html) # surrounded sed command by $(...)
new=( "${new[@]}" "$z" ) # quoted variables
done
#comparing the two arrays
echo "${temp[@]}" # quoted variables
echo "${new[@]}" # quoted variables
你的sed命令很好;它只需要被$(...)
包围,并删除并重新排列不必要的引号。
顺便说一句
在模式(GNU sed)之后得到五行:
sed '/pattern/,+5!d;//,+4d' file
答案 1 :(得分:0)
你应该是sed line应该是:
z=$(sed - n "${x} { p; q }" index.html)
请注意,我们使用“-n”标志告诉sed只打印我们告诉它的行。当我们到达存储在“x”变量中的行号时,它将打印它(“p”)然后退出(“q”)。为了允许扩展x变量,我们发送给sed的逗号必须放在双引号之间,而不是单引号。
你应该在之后使用它时将z变量放在双引号之间。
希望这有助于=)