行から一意の文字を含む構文を削除する方法

行から一意の文字を含む構文を削除する方法

次の構成ファイルがあります。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"

バックティックは二重引用符で動作するため、バックスラッシュで表示されます。

関連情報