vi를 통해 파일의 특정 줄을 주석 처리할 수 있습니다. 수백 개의 파일에 걸쳐 이 작업을 수행하는 것은 힘든 작업입니다. sed나 awk를 통해 조건을 설정할 수 있나요? 예를 들어 조건을 설정하고 싶습니다.모든 줄을 주석 처리하세요.그중에는 이것 client-ca-gh.ef.cd.1
과 그 이상이 있습니다.
파일에는 거의 500줄이 있으며 그 중 client1-100에는 100줄이 있으며 1부터 100까지 증가합니다. 모든 파일은 동일하며 유일한 차이점은 파일의 일부 공백으로 인해 줄 번호가 일치하지 않는다는 것입니다. 예를 들어 client5는 한 파일에서는 3행에 있지만 다른 파일에서는 4행에 있을 수 있습니다. 그렇지 않으면 줄 범위가 있는 모든 파일에 sed를 사용합니다.
:3,5s/client/#client
1 client-ca-gh.ef.cd.1
2 client-ca-gh.ef.cd.2
3 #client-ca-gh.ef.cd.3
4 #client-ca-gh.ef.cd.4
5 #client-ca-gh.ef.cd.5
답변1
보다 일반적인 솔루션은 다음을 사용합니다.awk
다음과 같은 파일의 경우:
header
header
client-ca-gh.ef.cd.1
client-ca-gh.ef.cd.4
client-ca-gh.ef.cd.2
client-ca-gh.ef.cd.3
other stuff
client-ca-gh.ef.cd.5
more stuff
a) 를 사용하여 줄을 검색 client-ca-gh.ef.cd.
한 다음 b) 마지막 숫자가 주어진 값보다 높으면 해당 줄을 주석 처리할 수 있습니다.
awk -F. '/^client-ca-gh\.ef\.cd\./ { if ($NF >= 3) {$0="#"$0}} {print}' file
결과:
header
header
client-ca-gh.ef.cd.1
#client-ca-gh.ef.cd.4
client-ca-gh.ef.cd.2
#client-ca-gh.ef.cd.3
other stuff
#client-ca-gh.ef.cd.5
more stuff
누락된 행, 헤더 및 기타 행 수, 클라이언트 행 사이의 간격 또는 임의 순서 지정을 통해 더 많은 유연성을 제공합니다.
내부 편집의 경우 GNU awk( )를 실행 중인 경우 sponge
내부 옵션을 사용하십시오.moreutils
gawk
awk -F. 'AWK CODE' file | sponge file
awk -i inplace -F. 'AWK CODE' file
답변2
sed
내가 올바르게 이해했다면 패턴이 client<number>$
이 줄에만 나타난다 고 가정하고 를 사용하여 이 작업을 수행할 수 있습니다 . 다른 예제 콘텐츠 사용:
local-ip 0.0.0.0 site-client1
foo
local-ip 0.0.0.0 site-client2
local-ip 0.0.0.0 site-client3
local-ip 0.0.0.0 site-client4
local-ip 0.0.0.0 site-client5
foo
local-ip 0.0.0.0 site-client6
local-ip 0.0.0.0 site-client7
local-ip 0.0.0.0 site-client8
local-ip 0.0.0.0 site-client9
...
$ sed -e '/client[0-9]*$/s/^/#/' -e 's/^#\(.*client[1-2]\)$/\1/' file
local-ip 0.0.0.0 site-client1
foo
local-ip 0.0.0.0 site-client2
#local-ip 0.0.0.0 site-client3
#local-ip 0.0.0.0 site-client4
#local-ip 0.0.0.0 site-client5
foo
#local-ip 0.0.0.0 site-client6
#local-ip 0.0.0.0 site-client7
#local-ip 0.0.0.0 site-client8
#local-ip 0.0.0.0 site-client9