줄에서 고유 문자가 포함된 구문을 제거하는 방법

줄에서 고유 문자가 포함된 구문을 제거하는 방법

다음 구성 파일이 있습니다.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"

백틱은 큰따옴표로 작동하므로 백슬래시로 표시합니다.

관련 정보