![sed를 사용하여 일치하는 줄의 단어를 바꾸는 방법은 무엇입니까?](https://linux55.com/image/25457/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EC%A4%84%EC%9D%98%20%EB%8B%A8%EC%96%B4%EB%A5%BC%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음과 유사한 줄을 감지하기 위해 sed 표현식을 작성하려고 합니다.
s0:12345:respawn:/sbin/agetty -8 -s 115200 ttyS0 linux
그리고 ttys0
로 교체something_else
#
주석 처리된 행(으로 시작 ) 을 감지하고 싶지 않습니다.
전체 줄을 바꿀 수 있지만 나머지 줄은 변경하지 않고 부분 문자열만 바꾸려면 어떻게 해야 합니까?
답변1
이를 수행하는 한 가지 방법은 다음과 같습니다.
echo 's0:12345:respawn:/sbin/agetty -8 -s 115200 ttyS0 linux' |
sed -e '/^[^#]/ s/ttyS0/foo/'
답변2
ttyS0 앞 부분과 ttyS0 뒤 부분을 일치시키고 줄이 다음으로 시작하지 않는지 확인하세요 #
.
sed 's/^[^#]\(.*\)ttyS0\(.*\)/\1something\2/'
결과:
%> echo "s0:12345:respawn:/sbin/agetty -8 -s 115200 ttyS0 linux" | sed 's/^[^#]\(.*\)ttyS0\(.*\)/\1something\2/'
0:12345:respawn:/sbin/agetty -8 -s 115200 something linux
답변3
항상 이것으로 시작한다면 s[number]colon
(GNU sed를 사용하여) 다음을 수행할 수 있습니다.
sed -r '/^s[0-9]+:/s/ttyS0/something_else/' infile
이렇게 하면 필요에 맞게 정규식으로 시작하는 모든 줄이 변경됩니다.