sed +는 줄 시작 부분에 문자열을 추가하지만 이미 존재하는 경우 무시합니다.

sed +는 줄 시작 부분에 문자열을 추가하지만 이미 존재하는 경우 무시합니다.

다음 예에서는 fstab에서 UUID 번호를 일치시킬 때 줄 시작 부분에 문자열을 추가하는 방법을 보여줍니다.

sed -e "/UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/ s/^/###FAULTY_DISK###/"  -i /etc/fstab

우리는 확인할 수 있습니다

more /etc/fstab 

###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0

하지만 두 번째 실행에서 우리는

sed -e "/UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/ s/^/###FAULTY_DISK###/"  -i /etc/fstab


more /etc/fstab
###FAULTY_DISK######FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0

###FAULTY_DISK###fstab 파일에 이미 설정된 경우 추가를 무시하도록 sed에 지시하는 방법

답변1

해당 UUID로 시작하는 경우에만 추가합니다.

sed -e 's/^UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/###FAULTY_DISK###&/' /etc/fstab

또는 선행 공백도 무시하려는 경우(있는 경우):

sed -e 's/^[[:blank:]]*UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/###FAULTY_DISK###&/' /etc/fstab

답변2

또 다른 방법은 로 줄을 건너뛰는 것입니다 ###FAULTY_DISK###. 한 줄에는 잘못된 디스크 설명이 포함되어 있고 다른 줄에는 그렇지 않은 다음 예제 파일을 생각해 보세요.

$ cat fstab 
UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0
###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0

nin 명령을 사용하여 sed다음 줄로 이동할 수 있습니다. 따라서 sed이 줄이 오류 메시지와 일치하면 다음 줄로 이동하라는 메시지가 표시됩니다.

$ sed  "/###FAULTY_DISK###/n; s/UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/###FAULTY_DISK###&/" fstab 
###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0
###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a /data/sdc ext4 defaults,noatime 0 0

보시다시피 메시지는 메시지가 없는 행에만 추가됩니다.

답변3

내가 올바르게 이해했다면:

반면

##FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a
UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a

그 다음에

$ sed '/^###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/!s/^UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a/###FAULTY_DISK###&/' /etc/fstab 
###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a
###FAULTY_DISK###UUID=953b1921-ac73-4b7b-abaf-ff983b0fce8a

답변4

사용행복하다(이전 Perl_6)

raku -pe 's/ ^ ("UUID=86d58af9-801b-4c25-b59d-80b52b4acc61") /\#\#\#FAULTY_DISK\#\#\#$0/;' fstab_test.txt

또는

raku -pe 's[ ^ ("UUID=86d58af9-801b-4c25-b59d-80b52b4acc61") ] = "\#\#\#FAULTY_DISK\#\#\#$0";'

위의 답변은 Perl 프로그래밍 언어 제품군에 속하는 Raku로 작성되었습니다. 일단 앞에 추가되면 동일한 Raku 단일 라인의 후속 실행 중에 ###FAULTY_DISK###파일의 한 라인이 fstab무시됩니다. 즉, 수정이 안정적입니다.

샘플 입력 및 샘플 출력은 아래 링크를 참조하세요.

https://unix.stackexchange.com/a/689556/227738

관련 정보