sed를 사용하여 로그 파일의 긴 경로 정리

sed를 사용하여 로그 파일의 긴 경로 정리

스크립트는 수십 줄의 로그 파일을 생성할 수 있으며 대부분의 줄은 매우 깁니다. 약간의 편집을 통해 이 블로그를 인간화할 수 있다면 좋을 것 같습니다.

런타임에는 몇 가지 유용한 환경 변수가 있습니다. ${X}에 해당한다고 말하다/usr/projects/draco/vendors/spack.tt.developmental/spack.tt.2017-12-06.with-flags/opt/spack/cray-CNL-haswell/intel-17.0.4/gsl-2.4-zagfxq3p5iorh7viw4gc24bwzlx2tyk7

내 목표는 환경 변수를 사용하여 다음과 같은 줄을 찾는 것입니다.

Leaving directory /usr/projects/draco/vendors/spack.tt.developmental/spack.tt.2017-12-06.with-flags/opt/spack/cray-CNL-haswell/intel-17.0.4/gsl-2.4-zagfxq3p5iorh7viw4gc24bwzlx2tyk7

여기에서 편리한 자리 표시자로 교체하세요.gsl-install

Leaving directory gsl-install

내 노력에는 다음과 같은 실패한 구문이 포함되었습니다.

sed -i -e 's/${X}/gsl-install/g' tedious.log

sed환경 변수를 제공하고 해당 문자열을 바꾸려면 어떻게 해야 합니까 ?


$ uname -a
Darwin ***.***.*** 16.7.0 Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64 x86_64

답변1

두 가지 질문이 있습니다

  • 환경 변수에 "/" 문자가 포함되어 있습니다.
  • sed 매개변수를 작은따옴표로 묶으므로 ${X}가 대체 없이 전달됩니다.

sed모든 문자를 명령 구분 기호 로 사용할 수 있습니다 . 검색 문자열에 나타날 가능성이 낮은 콘텐츠를 선택하세요. 명령 주위에 큰따옴표를 사용하십시오 . sed예를 들면 다음과 같습니다 .

sed -i -e "s;${X};gsl-install;g" tedious.log

답변2

sed 스크립트에서 bash 변수를 사용하려면 작은따옴표를 분리하고 큰따옴표 안에 변수를 추가한 다음 다시 sed의 작은따옴표로 묶어야 합니다.

아래 예:

DAY1=$(date -d "+1days" +%m%d%Y)
DAY2=$(date -d "+2days" +%m%d%Y)
DAY3=$(date -d "+3days" +%m%d%Y)
sed -n -E -e '/\s\s\s*'"($DAY1|$DAY2|$DAY3)"'/p' $file
#or
sed -n -E -e ';\s\s\s*'"($DAY1|$DAY2|$DAY3)"';p' $file

관련 정보