폴더에는 많은 파일이 있습니다. 특정 패턴이 있는 경우 각 줄을 주석 처리하고 싶습니다.
예제 패턴:
`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
패턴과 일치하는 파일 이름만 나열-Z
0바이트로 구분된 출력(개행 문자와 같은 특이한 문자가 포함된 파일 이름을 처리하기 위해). 그런 다음 검색 및 바꾸기를 수행하는 데 사용되거나sed
같은 프로그램에 전달될 수 있습니다.perl
xargs -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"' _ {} \;