명령줄을 사용하여 찾기 및 바꾸기

명령줄을 사용하여 찾기 및 바꾸기

log.txt파일에는 다음이 포함됩니다.

...
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
...

어떻게 교체할 수 있나요?

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

그리고

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 0.0.0.0/0  

명령줄에서? 즉, 0.0.0.0/0줄 끝에 추가하고 싶습니다.

답변1

sed 사용

sed -i 's+^mynetworks.*+& 0.0.0.0/0+' log.txt

awk를 사용하세요

awk '/^mynetworks/ {$0=$0" 0.0.0.0/0"} 1' log.txt

또는

awk '{if ($1 ~ /^mynetworks/) print $0, "0.0.0.0/0"; else print $0}' log.txt

배쉬를 사용하여

while read -r line ; do
    [[ $line == mynetworks* ]] && line+=" 0.0.0.0/0"
    echo "$line"
done < log.txt

답변2

파일의 한 줄에 지정된 텍스트를 추가하려면 -행이 다음으로 끝나는 유일한 행인 경우mynetworks, 다음과 같이 할 수 있습니다.

sed --in-place '/^mynetworks/s_.*_& 0.0.0.0/0_' /path/to/file

답변3

저는 Perl을 주로 사용하는 편입니다. 이 경우 sed 또는 awk가 작동하지만 때로는 Perl의 유연성이 유용할 때도 있습니다.

perl -pi -e 's/^(mynetworks.*)/$1 0.0.0.0\/0/' /path/to/file

아니면 파이프 체인에 있는 경우

cat file | perl -pe 's/^(mynetworks.*)/$1 0.0.0.0\/0/'

관련 정보