sed 不匹配等号或识别第二个斜杠后的特殊字符
sed does not match equal sign or recognize special characters after the second slash
我是 sed 的新手,对这个问题感到困惑。文本文件中有一行:
start_year = 1952,
我需要用数组中的年份编号替换开始年份编号,比如 time_c=(1999 01 01)
。所以我测试了以下命令:
txt=" start_year = 1952,"
echo "$txt" | sed -r 's/([:blank:]*start_year[:blank:]*=) (.*)/ [:blank:]${time_c[0]}/g'
但这只会返回去除空格的原始行:
start_year = 1952,
似乎 sed 只在我删除等号时才识别模式,因为如果我这样做
echo "$txt" | sed -r 's/([:blank:]*start_year[:blank:]*) (.*)/ = [:blank:]${time_c[0]}/g'
那么结果就是:
start_year = [:blank:]${time_c[0]}
现在sed好像识别正确了。但是,为什么它不解释 [:blank:] 和我的变量呢?
另一件小事是,如果可能的话,我想在替换文本中保留原始空格。这对我的程序无关紧要,但它使替换的行与其他行更好地对齐。
有人可以帮忙吗?非常感谢!
试试这个
$ time_c=(1999 01 01); echo " start_year = 1952," |
sed -r "s/(\s*start_year\s+=\s*)(.*)(,)/${time_c[0]}/"
start_year = 1999,
Shell 不会在单引号内进行任何类型的替换。
此外,字符 类 是带有双括号的 [[:space:]]
。您也可以执行 [^[:space:][:digit:]]
之类的操作(不是 space 或数字)。并且替换文本不希望 [:space:]
出现 — 好吧,很可能它不会
这个有效:
time_c=(1999 01 01)
txt=" start_year = 1952,"
echo "$txt" | sed -r 's/([[:blank:]]*start_year[[:blank:]]*=) (.*)/ '"${time_c[0]}"'/g'
请注意 shell 变量的扩展是如何在单引号外和双引号内完成的——这通常是个好主意(单引号外很重要;双引号内是个好主意)。
它产生:
start_year = 1999
我是 sed 的新手,对这个问题感到困惑。文本文件中有一行:
start_year = 1952,
我需要用数组中的年份编号替换开始年份编号,比如 time_c=(1999 01 01)
。所以我测试了以下命令:
txt=" start_year = 1952,"
echo "$txt" | sed -r 's/([:blank:]*start_year[:blank:]*=) (.*)/ [:blank:]${time_c[0]}/g'
但这只会返回去除空格的原始行:
start_year = 1952,
似乎 sed 只在我删除等号时才识别模式,因为如果我这样做
echo "$txt" | sed -r 's/([:blank:]*start_year[:blank:]*) (.*)/ = [:blank:]${time_c[0]}/g'
那么结果就是:
start_year = [:blank:]${time_c[0]}
现在sed好像识别正确了。但是,为什么它不解释 [:blank:] 和我的变量呢?
另一件小事是,如果可能的话,我想在替换文本中保留原始空格。这对我的程序无关紧要,但它使替换的行与其他行更好地对齐。
有人可以帮忙吗?非常感谢!
试试这个
$ time_c=(1999 01 01); echo " start_year = 1952," |
sed -r "s/(\s*start_year\s+=\s*)(.*)(,)/${time_c[0]}/"
start_year = 1999,
Shell 不会在单引号内进行任何类型的替换。
此外,字符 类 是带有双括号的 [[:space:]]
。您也可以执行 [^[:space:][:digit:]]
之类的操作(不是 space 或数字)。并且替换文本不希望 [:space:]
出现 — 好吧,很可能它不会
这个有效:
time_c=(1999 01 01)
txt=" start_year = 1952,"
echo "$txt" | sed -r 's/([[:blank:]]*start_year[[:blank:]]*=) (.*)/ '"${time_c[0]}"'/g'
请注意 shell 变量的扩展是如何在单引号外和双引号内完成的——这通常是个好主意(单引号外很重要;双引号内是个好主意)。
它产生:
start_year = 1999