我们有以下配置文件,env.gc.txt
export SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:{{hbase_log_dir}}/gc.log-`date +'%Y%m%d%H%M'`"
我们尝试-`date +'%Y%m%d%H%M'`
从包含以下内容的行中删除语法SERVER_GC_OPTS
sed -i '/SERVER_GC_OPTS/ s/-`date +'%Y%m%d%H%M'`//g'
或者
sed '/SERVER_GC_OPTS/ s/-\`date +'%Y%m%d%H%M'\`//g'
但没有成功。
-`date +'%Y%m%d%H%M'`
从行中删除语法 - 的最佳正确方法是什么?
(注:perl
单衬也是一种选择)
预计产出env.gc.txt
export SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:{{hbase_log_dir}}/gc.log"
答案1
命令中使用的单引号date
破坏了sed
脚本。
尝试这个:
sed '/SERVER_GC_OPTS/s/-`date \+.*"$/"/' env.gc.txt
这将删除字符串-`date +
和所有内容,直到结束双引号。
答案2
或者,只需查找反引号、一些非反引号字符和另一个要删除的反引号任何文件中的命令替换:
sed -i '/SERVER_GC_OPTS/ s/-`[^`]\+`//g' file
等效的 perl 是
perl -i -pe '/SERVER_GC_OPTS/ && s/-\`.+?\`//g' file
答案3
一种解决方法是在 周围使用双引号sed
,如下所示:
sed "/SERVER_GC_OPTS/ s/-\`date +'%Y%m%d%H%M'\`//g"
我们反斜杠反引号,因为它们在双引号下有效。