次の構成ファイルがあります。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'`
1行から構文を削除するのに最適で正しい方法は何ですか?
(注: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 -i -pe '/SERVER_GC_OPTS/ && s/-\`.+?\`//g' file
答え3
1つの回避策は、次のように二重引用符を使用することですsed
。
sed "/SERVER_GC_OPTS/ s/-\`date +'%Y%m%d%H%M'\`//g"
バックティックは二重引用符で動作するため、バックスラッシュで表示されます。