Regex 在sed中使用变量作为数字

Regex 在sed中使用变量作为数字,regex,bash,sed,grep,Regex,Bash,Sed,Grep,当使用变量作为数字时,让sed | grep管道工作有一些困难。 在下面的字符串中,“3,5p”可以正常工作,但是当用数字替换变量时,我得到了错误 sed:-e表达式#1,字符4:命令后的额外字符 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:) 我还想知道如何更改命令,

当使用变量作为数字时,让sed | grep管道工作有一些困难。 在下面的字符串中,“3,5p”可以正常工作,但是当用数字替换变量时,我得到了错误

sed:-e表达式#1,字符4:命令后的额外字符

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

谢谢
Art

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

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

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

当您在找到
字符串的
$myFile
中检查行号时,如果该行位于
$LINESTART
$LINEEND
之间,您可以执行以下操作:

awk 'NR>=start && NR<=end && /string/ {print NR}' start=$LINESTART end=$LINEEND ${myFile}
  • -i.bak
    对文件进行备份并进行就地编辑:
    文件
    将包含修改后的文件,而
    文件.bak
    将作为备份
试验
$cat a
你好
这是
某物
我要换衣服
结束
但这是不能改变的
$sed-i.bak'3,5 s/已更改/新/'a
$cat a
你好
这是
某物

我想要新的优秀的如此快速地收集报价,将接受尽快如此将允许我。thx艺术。PS关于如何替换字符串而不是吐出数字并运行另一行代码来替换的任何建议?@artvanderlay nice:)如果要替换,可以使用
sed-i'…'
查看我的更新答案。+1了解添加的详细信息
sed -i.bak "$LINESTART,$LINEEND s/FIND/REPLACE/' file
$ cat a
hello
this is
something
i want changed
end
but this is not to be changed

$ sed -i.bak '3,5 s/changed/NEW/' a
$ cat a
hello
this is
something
i want NEW      <---- "changed" got replaced
end
but this is not to be changed <---- this "changed" did not