使用vars作为sed中的数字

时间:2014-05-14 15:30:30

标签: regex bash sed grep

在获得sed时遇到一些困难使用vars作为数字时grep管道工作。 在' 3,5p'以下的字符串中工作得很好,但是当用数字代替变量时,我得到了错误

sed: -e expression #1, char 4: extra characters after command

working=$(sed -n '3,5p' ${myFile} | grep -n "string" |cut -f1 -d: )

notWorking=$(sed -n '${LINESTART},${LINEEND}p' ${myFile} | grep -n "string" |cut -f1 -d: )

我也会对如何更改命令的任何建议感兴趣,以便在myFile文件中用$ string2替换返回的行号

感谢 领域

1 个答案:

答案 0 :(得分:1)

您需要通过sed扩展变量。为此,您必须将表达式括在双引号中:

sed -n  "${LINESTART},${LINEEND}p"  ${myFile} 
        ^                        ^

而不是

sed -n  '${LINESTART},${LINEEND}p'  ${myFile}

当您检查找到$myFile的{​​{1}}中的行号时,该行位于string$LINESTART之间,您可以执行以下操作:

$LINEEND

假设您想要替换字符串,只要它出现在特定行中即可。你可以用这个:

awk 'NR>=start && NR<=end && /string/ {print NR}' start=$LINESTART end=$LINEEND ${myFile}
  • sed -i.bak "$LINESTART,$LINEEND s/FIND/REPLACE/' file 对文件进行备份并执行就地编辑:-i.bak将包含已修改的文件,而file将作为备份。

测试

file.bak