다음과 유사한 줄을 감지하기 위해 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
이렇게 하면 필요에 맞게 정규식으로 시작하는 모든 줄이 변경됩니다.