sed 명령 작성

sed 명령 작성

sed공백이 아닌 첫 번째 문자가 a +또는 a 인 모든 줄은 -공백과 a로 끝나도록 정규식을 작성해야 합니다 \\. 예를 들어, 라인은 다음과 같습니다:

    -u, -\hspace{.01cm}-unset name

다음과 같아야 합니다:

    -u, -\hspace{.01cm}-unset name \\

나는 이것을 시도한다:

/^[       ]- s/$/ \\\\/g 

하지만 작동하지 않습니다. 어떻게 해야 하나요?

답변1

다음 테스트 파일을 고려해보세요.

$ cat testfile 
-u, -\hspace{.01cm}-unset name
 u, -\hspace{.01cm}-unset name
+u, -\hspace{.01cm}-unset name

다음 sed명령을 고려하십시오.

$ sed '/^[[:blank:]]*[-+]/ s/$/ \\\\/' testfile
-u, -\hspace{.01cm}-unset name \\
 u, -\hspace{.01cm}-unset name
+u, -\hspace{.01cm}-unset name \\

/^[[:blank:]]*[-+]/-비어 있지 않거나 또는 탭 문자가 있는 첫 번째 줄을 선택합니다 +. 이러한 행의 경우 대체 명령이 \\행 끝에 추가됩니다.

또는 하나의 출력만 원하는 경우 \:

$ sed '/^[[:blank:]]*[-+]/ s/$/ \\/' testfile
-u, -\hspace{.01cm}-unset name \
 u, -\hspace{.01cm}-unset name
+u, -\hspace{.01cm}-unset name \

이는 [:blank:]공백 및 탭과 일치하는 유니코드 안전 문자 클래스입니다.

답변2

$ cat file
    -u, -\hspace{.01cm}-unset name
     u, -\hspace{.01cm}-unset name
    +u, -\hspace{.01cm}-unset name \\

    -u, -\hspace{.01cm}-unset name \\
     u, -\hspace{.01cm}-unset name \\
    +u, -\hspace{.01cm}-unset name

$ sed -E '/^[[:blank:]]*[+-]/s/( \\\\)?$/ \\\\/' file
    -u, -\hspace{.01cm}-unset name \\
     u, -\hspace{.01cm}-unset name
    +u, -\hspace{.01cm}-unset name \\

    -u, -\hspace{.01cm}-unset name \\
     u, -\hspace{.01cm}-unset name \\
    +u, -\hspace{.01cm}-unset name \\

위 명령은 sed또는로 시작하고 선택적으로 공백이나 탭이 앞에 오는 행을 찾습니다. 해당 줄을 찾으면 줄 끝(있는 경우)에서 이전 공백을 제거한 다음 줄 끝에 공백 합계를 추가합니다.+-\\\\

\\이렇게 하면 이미 해당 문자열이 있는 줄 끝에 추가하지 않습니다 .

관련 정보