Regex 找到一个模式并替换整个系列&;找到一个图案,然后插入
问题1: 模式:Regex 找到一个模式并替换整个系列&;找到一个图案,然后插入,regex,linux,bash,replace,sed,Regex,Linux,Bash,Replace,Sed,问题1: 模式: test_$(whoami) 变量: var1=$(pwd) 我想找到模式并用var1 sed -i "s/.*test_$(whoami).*/$var1/" test.txt 它给了我sed:-e表达式#1,char 28:s的未知选项 问题2 模式: #####Insert here##### 要插入的内容:包括$var1/file_$(whoami).txt 我想找到与模式完全匹配的行,并在一行之后插入内容 sed -i "s/#####Insert here#
test_$(whoami)
变量:
var1=$(pwd)
我想找到模式并用var1
sed -i "s/.*test_$(whoami).*/$var1/" test.txt
它给了我sed:-e表达式#1,char 28:s的未知选项
问题2
模式:
#####Insert here#####
要插入的内容:包括$var1/file_$(whoami).txt
我想找到与模式完全匹配的行,并在一行之后插入内容
sed -i "s/#####Insert here#####/include $var1/file_$(whoami).txt" test.txt
也不行
有人能帮忙吗?关于问题1。使用不同的正则表达式分隔符:
sed -i.bak "s~^.*test_$(whoami).*$~$var1~" test.txt
因为$var1
可以包含问题1。
$var1似乎包含一个解释为sed分隔符的字符,即:“/”
在替换命令中,在第三个分隔符之后,sed需要出现一个编号,您可能正在提供文本
例如,如果:
var1="~/myDirectory"
然后,这将生成一个带有太多分隔符的sed命令:
sed -i 's/.*test_$(whoami).*/~/myDirectory/"
您应该使用不同的分隔符,例如~、#、!、?、&、|。。。您的regexp中不存在的一个。
Sed将自动识别替换命令后的分隔符,并允许您在regexp中使用“/”字符:
sed "s#~/toto#~/tata#"
如果很难找到regexp中不存在的字符,可以使用模式中不太可能存在的不可打印字符。例如,如果shell是bash:
$ echo '/~#' | sed s$'\001''/~#'$'\001''!?\&'$'\001''g'
在本例中,bash将$'\001'
替换为八进制值为001的字符-在ASCII中是SOH字符(标题的开头)
由于这些字符是控制/不可打印字符,因此它们是否会存在于模式中是值得怀疑的。除非,也就是说,您正在做一些奇怪的事情,比如在没有正确的区域设置的情况下修改二进制文件或Unicode文件
问题2。
您可能正在查找sed的append函数('a'):
sed -i "/#####Insert here#####/ a include $var1/file_$(whoami).txt" test.txt