在获得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替换返回的行号
感谢 领域
答案 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