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
또는로 시작하고 선택적으로 공백이나 탭이 앞에 오는 행을 찾습니다. 해당 줄을 찾으면 줄 끝(있는 경우)에서 이전 공백을 제거한 다음 줄 끝에 공백 합계를 추가합니다.+
-
\\
\\
\\
이렇게 하면 이미 해당 문자열이 있는 줄 끝에 추가하지 않습니다 .