sed 명령은 txt 파일의 파일 경로를 대체합니다.

sed 명령은 txt 파일의 파일 경로를 대체합니다.

여러분, 안녕하세요!

sed cmd를 사용하여 텍스트 파일의 디렉터리 경로를 변경하려고 합니다.

명령을 테스트하고 있는 서버는 Rocky Linux 8.5(Green Obsidian)를 실행하고 있습니다.

이것은 내가 사용하는 sed 명령입니다.

sed -i 's|1344P1052_ssl02 /gs:/prod1|sd://prod1-backup|g' example.txt

sed -i 's|1344P1052_ssl09 /gs:/prod1|sd://prod1-backup|g' example.txt

출력에는 오류가 없지만 파일의 디렉터리 경로는 동일하게 유지됩니다.

변경되어야 합니다. [아래 예]

앞으로:

1344P1052_ssl02 /gs:/prod1/some_notes_here_1
1344P1052_ssl09 /gs:/prod1/some_notes_here_2

뒤쪽에:

sd://prod1-backup/some_notes_here_1
sd://prod1-backup/some_notes_here_2

공백, 세미콜론 등으로 인해 작동하지 않는 줄 알았는데 그룹의 답변을 Google에서 검색하여 사용했습니다.|

특수 문자, 백슬래시 및 공백을 사용해야 합니다. 이제는 확실하지 않아서 vim을 사용하여 한 줄씩 수동으로 수행했습니다.

어떤 도움이라도 정말 감사드립니다...

답변1

입력 파일의 두 열이 공백으로 구분되지 않고 탭으로 구분되어 있기 때문에 교체가 실패했다고 가정합니다.

정규식에서 공백 대신 리터럴 탭 문자(명령줄에 입력 사용)를 사용 하거나 (단일 탭 또는 공백 문자 일치) 또는 (일치) Ctrl+V Tab와 같이 탭 문자를 나타내는 표현식을 사용할 수 있습니다. 단일 가로 및 세로 탭, 캐리지 리턴 등을 포함하여 더 큰 공백과 유사한 문자 그룹 내의 단일 문자입니다.[[:blank:]][[:space:]]

sed -e 's|^1344P1052_ssl02[[:blank:]]/gs:/prod1/|sd://prod1-backup/|' \
    -e 's|^1344P1052_ssl09[[:blank:]]/gs:/prod1/|sd://prod1-backup/|' \
    -i example.txt

아니면 더 짧게,

sed -e 's|^1344P1052_ssl0[29][[:blank:]]/gs:/prod1/|sd://prod1-backup/|' \
    -i example.txt
  • 패턴의 공백을 로 바꾸었습니다 [[:blank:]]. 이렇게 하면 텍스트의 해당 위치에 단일 공백이나 탭이 허용됩니다.
  • sed또한 전체 파일을 두 번 읽는 것을 피하기 위해 이 두 가지 교체를 하나의 호출로 결합했습니다 .
  • g한 줄에 두 번 이상의 교체를 수행하고 싶지 않기 때문에 두 교체 명령 모두에서 플래그를 제거했습니다 .
  • ^각 줄의 시작 부분에 패턴이 일치하는지 확인하기 위해 앵커를 추가했습니다 .
  • 더 높은 번호의 콘텐츠 /와 관련된 행이 실수로 변경되는 것을 방지하기 위해 패턴 끝에 대체 문자열을 추가 했습니다 .prod10prod

관련 정보