在bash脚本中使用sed

时间:2012-10-06 20:50:59

标签: regex linux bash sed grep

使用通过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[@]}

2 个答案:

答案 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变量放在双引号之间。

希望这有助于=)