폴더의 모든 파일에서 패턴과 일치하는 행을 주석 처리하는 방법

폴더의 모든 파일에서 패턴과 일치하는 행을 주석 처리하는 방법

폴더에는 많은 파일이 있습니다. 특정 패턴이 있는 경우 각 줄을 주석 처리하고 싶습니다.

예제 패턴:

`include "xyz.vh"

예상 출력:

// `include "xyz.vh"

그러니 나에게도 같은 지침을주십시오.

답변1

이것은 당신에게 도움이 될 수 있습니다.

sed '/`include "xyz.vh"/s/^/\/\/ /' filename

모든 파일에서 패턴을 검색하려면 다음 명령을 사용할 수 있습니다.

find . -type f -exec sed '/`include "xyz.vh"/s/^/\/\/ /' {} \;

또 다른 방법은 perl,

perl -p0e 's/(.*`include "xyz.vh"\n)/\/\/ \1/g' file

답변2

grep원하는 패턴이 포함된 파일을 필터링 하는 데 사용됩니다.

grep -rlZ 'pattern'
  • -r하위 디렉터리를 포함하여 디렉터리를 반복적으로 검색하는 옵션(기본값은 현재 디렉터리)
  • -l패턴과 일치하는 파일 이름만 나열
  • -Z0바이트로 구분된 출력(개행 문자와 같은 특이한 문자가 포함된 파일 이름을 처리하기 위해). 그런 다음 검색 및 바꾸기를 수행하는 데 사용되거나 sed같은 프로그램에 전달될 수 있습니다.perlxargs -0

함께 넣어보세요:

grep -rlZ '`include "xyz.vh"' | xargs -0 perl -i -pe 's|^|// | if /`include "xyz.vh"/'
  • -i옵션은 변경 사항으로 입력 파일 자체를 수정합니다.

답변3

그리고 awk:

awk '/`include "xyz.vh"/ {print "// " $0; next} 1' file.txt

최신 GNU를 사용하여 파일을 편집하려면 다음을 수행하십시오 awk.

awk -i inplace '/`include "xyz.vh"/ {print "// " $0; next} 1' file.txt

다른 모든 awk구현의 경우 임시 파일을 사용하십시오.

awk '/`include "xyz.vh"/ {print "// " $0; next} 1' file.txt >file.txt.tmp && \
    mv file.txt.tmp file.txt

현재 디렉터리에서 시작하는 모든 파일에 대해 재귀적으로 다음을 수행합니다.

find . -type f -exec awk -i inplace '/`include "xyz.vh"/{print "// " $0; next} 1' {} \;

find . -type f -exec sh -c 'awk "/`include "xyz.vh"/ {print "// " $0; next} 1" "$1" \
       >"$1".tmp && mv "$1".tmp "$1"' _ {} \;

관련 정보