여러 줄이 포함된 텍스트 파일이 있고 특정 텍스트가 포함된 줄을 검색하고 이 줄의 시작 부분에 #을 추가하고 싶습니다.
예: file1 변경하고 싶습니다.
acnet 6801/tcp # ACNET Control System Protocol
acnet 6801/udp # ACNET Control System Protocol
dlip 7201/tcp # DLIP
dlip 7201/udp # DLIP
ssp-client 7801/tcp # Secure Server Protocol - client
ssp-client 7801/udp # Secure Server Protocol - client
inputfile1에 있는 포트를 찾고 싶습니다. 입력 파일에는 다음이 포함됩니다.
6801
7801
따라서 file1의 최종 출력은 다음과 같습니다.
#acnet 6801/tcp # ACNET Control System Protocol
#acnet 6801/udp # ACNET Control System Protocol
dlip 7201/tcp # DLIP
dlip 7201/udp # DLIP
#ssp-client 7801/tcp # Secure Server Protocol - client
#ssp-client 7801/udp # Secure Server Protocol - client
나는 노력했다
cat /etc/services |grep -f ports.txt | awk '{ print"#" $g}';
그러나 이것은 나에게 화면에 출력을 제공합니다. 파일에서 어떻게 변경할 수 있나요?
답변1
다음과 같이 시도해 보세요:
awk -F"[ \t]*|/" 'NR==FNR{A[$1]; next} $2 in A { printf "#" }1' ports.txt /etc/services > newfile
출력이 올바르면 다음 위치에 복사할 수 있습니다./etc/services
답변2
sed '/6801\|7801/ {s/^/#/}' input
#acnet 6801/tcp # ACNET Control System Protocol
#acnet 6801/udp # ACNET Control System Protocol
dlip 7201/tcp # DLIP
dlip 7201/udp # DLIP
#ssp-client 7801/tcp # Secure Server Protocol - client
#ssp-client 7801/udp # Secure Server Protocol - client
답변3
REGEXP=$(cat ports.txt | xargs | sed -e 's/ /|/g')
sed -E -i -e "/[[:space:]]$REGEXP\// s/^/#/" inputfile1
이는 의 내용을 기반으로 확장 정규식을 구성한 ports.txt
다음 이를 사용하여 inputfile1
문자 앞에 추가할 특정 주소(줄)를 선택합니다.#
정규식은 지정된 범위 밖의 어떤 것과도 일치하지 않도록 시작 부분과 /
끝 부분에 공백을 사용하여 "고정"됩니다. 예를 들어 앵커가 없으면 25
in 은 ports.txt
포트 25와 일치할 뿐만 아니라 다음과도 일치합니다. , 등을 25
포함하여 그 중 특정 숫자를 포함하는 모든 것 2501
.1025
250
그런데 ports.txt에 설명을 추가하려면 다음 명령을 사용하십시오.
REGEXP=$(sed -e 's/#.*//' ports.txt | xargs | sed -e 's/ /|/g')
sed -E -i -e "/[[:space:]]$REGEXP\// s/^/#/" inputfile1
위의 첫 번째 버전은오직포트 번호, 공백 및 빈 줄만 포함 하면 제대로 작동합니다 ports.txt
. 불필요한 문자(특히 정규식에서 특별한 의미를 갖는 문자)는 예측할 수 없고 거의 확실히 나쁜 결과를 초래할 수 있습니다.
두 번째 버전은 주석(즉, 줄 #
의 모든 문자를 포함하여 줄의 문자 뒤의 모든 내용)을 제거하므로 주석의 모든 문자도 허용됩니다(무시됨).
sed
또한 ports.txt에 나열된 포트로 인해 명령이 최대 명령줄 길이를 초과하는 경우에도 실패합니다. 크기는 일반적으로 약 128KB이므로 이 경우에는 문제가 되지 않지만 다른 작업에 이 기술을 사용하는 경우 주목할 가치가 있습니다.