다음 구성 파일이 있습니다.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 -i -pe '/SERVER_GC_OPTS/ && s/-\`.+?\`//g' file
답변3
한 가지 해결 방법은 다음과 같이 큰따옴표를 사용하는 것입니다 sed
.
sed "/SERVER_GC_OPTS/ s/-\`date +'%Y%m%d%H%M'\`//g"
백틱은 큰따옴표로 작동하므로 백슬래시로 표시합니다.